从标签列表中删除所有内容

时间:2018-11-11 04:04:53

标签: python html beautifulsoup tags

我试图了解从最后一个字符串中删除数组中所有内容的必要性。

任务是: 在位置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)

1 个答案:

答案 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)