我正在尝试获取特定网站的URL。我正在处理中。谁能帮我?我可以在添加列表后删除列表中的某些元素(链接地址)。首先,我从特定网站(此处为swiggy.com)获取所有网址。在我尝试删除以'/'开头的列表元素(链接地址)之后。当我运行以下程序时,它只是删除其中一些。在程序本身中,我打印了修改前后的所有列表(链接地址)元素
下面是python中的代码:
导入urllib 从urllib导入请求 从bs4导入BeautifulSoup
def linkgetter(searchlink):
pagesource = urllib.request.urlopen(searchlink)
linkaddresses = []
soup = BeautifulSoup(pagesource,'lxml')
for link in soup.findAll('a'):
if link.get('href') == None:
continue
else:
linkaddresses.append(link.get('href'))
print(linkaddresses)
for i in linkaddresses:
if i.startswith('#'):
linkaddresses.remove(i)
elif i.startswith('/'):
linkaddresses.append(searchlink+i)
linkaddresses.remove(i)
print('\n')
print('\n')
print('\n')
print(linkaddresses)
linkgetter('https://www.swiggy.com')
答案 0 :(得分:2)
如评论中所述,修改要遍历的列表是一个坏主意!您可以使用值填充新列表,或者列表理解可以在这里成为您的朋友:)
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
我已经将您的for循环分解为2个理解。首先过滤掉以#
linkaddresses = [x for x in linkaddresses if not x.startswith('#')]
然后将链接地址附加到以/
开头的任何内容
linkaddresses = [searchlink+x if x.startswith('/') else x for x in linkaddresses]
现在完整代码
def linkgetter(searchlink):
pagesource = urllib.request.urlopen(searchlink)
linkaddresses = []
soup = BeautifulSoup(pagesource,'lxml')
for link in soup.findAll('a'):
if link.get('href') == None:
continue
else:
linkaddresses.append(link.get('href'))
print(linkaddresses)
linkaddresses = [x for x in linkaddresses if not x.startswith('#')]
linkaddresses = [searchlink+x if x.startswith('/') else x for x in linkaddresses]
print('\n')
print(linkaddresses)
linkgetter('https://www.swiggy.com')