0

这段代码的目的是:程序将使用 urllib 从下面的数据文件中读取 HTML,从锚标签中提取 href= vaues,扫描相对于列表中第一个名称的特定位置的标签,点击该链接并多次重复该过程并报告您找到的姓氏。从http://py4e-data.dr-chuck.net/known_by_Fikret.html开始。在位置 3 处找到链接(名字是 1)。按照那个链接。重复此过程 4 次。答案是您检索的姓氏。

示例答案:

$ python solution.py 
Enter URL: http://py4e-data.dr-chuck.net/known_by_Fikret.html
Enter count: 4
Enter position: 3
Retrieving: http://py4e-data.dr-chuck.net/known_by_Fikret.html
Retrieving: http://py4e-data.dr-chuck.net/known_by_Montgomery.html
Retrieving: http://py4e-data.dr-chuck.net/known_by_Mhairade.html
Retrieving: http://py4e-data.dr-chuck.net/known_by_Butchi.html
Retrieving: http://py4e-data.dr-chuck.net/known_by_Anayah.html

我的问题:我似乎只能使这个程序工作并获得所需的输出,如果我输入 4 的计数和 0 的位置。如果位置大于 0,那么我会收到错误:

Traceback (most recent call last):
  File "ass12_2.py", line 21, in <module>
    url= addurllist[pos]
IndexError: list index out of range

到目前为止,我的代码是:

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup


urllist= list()
url= input("Enter URL: ")
count= int(input("Enter count: "))
pos= int(input("Enter position: "))
urllist.append(url)
iter= 0

while iter<= count:
    html= urllib.request.urlopen(url).read()
    soup= BeautifulSoup (html, "html.parser")

    addurllist= list()
    tags= soup("a")
    for tag in tags: 
        tag= tag.get("href")
        addurllist.append(tag)
        url= addurllist[pos]
    iter= iter+ 1 
    print (url)
4

1 回答 1

0

我认为这是因为url = addurlist[pos]应该向左缩进一个。您在追加第一个元素后立即调用它,因此对于任何超过 0 的索引,它将超出范围。

于 2017-08-07T02:50:32.190 回答