我试图了解从最后一个字符串中删除数组中所有内容的必要性。
任务是: 在位置18找到链接(名字是1)。点击该链接。重复此过程7次。答案是您检索到的姓氏。
#Position / count - 3 variant
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
taglist=list()
url=input("Enter URL: ")
count=int(input("Enter count:"))
position=int(input("Enter position:"))
for i in range(count):
html = urllib.request.urlopen(url, context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
tags=soup('a')
for tag in tags:
taglist.append(tag)
url = taglist[position-1].get('href', None)
del taglist[:]
print ("Retrieving:",url)
答案 0 :(得分:1)
尽管这不是我会做的方式,但这是您每次都以一个新的taglist
开始的方式。在这一行:
for tag in tags:
taglist.append(tag)
您将附加到taglist
。如果删除列表的内容,则将重新开始外部for循环的每次迭代。
如果您在taglist
中建立了索引,则该函数的作用将有所不同。要查看的关键行是:
position=int(input("Enter position:"))
和
url = taglist[position-1].get('href', None)
如果您不重置taglist
,则position-1
将对应于另一个元素。
我不确定我会说你做错了什么,但是在不真正知道要使用该网站的站点的情况下,我倾向于使用list comprehension。第二种方法对我来说似乎更像Python,而且我也认为它更有效。
# Instead of this
tags=soup('a')
for tag in tags:
taglist.append(tag)
url = taglist[position-1].get('href', None)
del taglist[:]
# I would use this:
taglist = [tag for tag in soup('a')]
url = taglist[position-1].get('href', None)