Python:我的代码只在一个输入上运行,并在其余时间给出索引错误

问题描述:

此代码的目的是:程序将使用urllib从以下数据文件中读取HTML,从中提取href = vaues定位标记扫描列表中名称相对于名字的特定位置的标记,然后按照该链接重复该过程并报告您找到的姓氏。开始于http://py4e-data.dr-chuck.net/known_by_Fikret.html。找到位置3的链接(名字是1)。关注该链接。重复这个过程4次。答案是您检索的姓氏。Python:我的代码只在一个输入上运行,并在其余时间给出索引错误

样品答案:

$ 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 

我的问题:我似乎只能使这个工作方案,并得到所需的输出,如果我在0进入4的数量和位置。如果位置大于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) 
+1

你确定你的意思是'iter Shadow

+0

东西告诉我你需要_unindent_这一行一级:'url = addurllist [pos]' –

+0

@shadow ahh是我其实意味着iter Wannabe

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

+0

不能相信我错过了我们。谢谢您的帮助! – Wannabe