Python 无法删除某些列表元素
我正在尝试获取特定网站的URL。我正在做这件事。有人能帮我吗?我可以在添加列表后删除列表中的一些元素(链接地址)。首先,我从特定网站(这里是swiggy.com)获取所有URL。尝试删除以“/”开头的列表元素(链接地址)之后。当我运行下面的程序时,它只是删除了其中的一些。在程序本身中,我打印了修改前后的所有列表(链接地址)元素 下面是python中的代码: 导入URL库 从urllib导入请求 从bs4导入BeautifulSoupPython 无法删除某些列表元素,python,beautifulsoup,Python,Beautifulsoup,我正在尝试获取特定网站的URL。我正在做这件事。有人能帮我吗?我可以在添加列表后删除列表中的一些元素(链接地址)。首先,我从特定网站(这里是swiggy.com)获取所有URL。尝试删除以“/”开头的列表元素(链接地址)之后。当我运行下面的程序时,它只是删除了其中的一些。在程序本身中,我打印了修改前后的所有列表(链接地址)元素 下面是python中的代码: 导入URL库 从urllib导入请求 从bs4导入BeautifulSoup def linkgetter(searchlink):
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')
正如在评论中提到的,修改循环列表是个坏主意!您可以用这些值填充一个新列表,或者列表理解可以是您的朋友:) 我把你的for循环分成了两个理解。首先要过滤掉以
#
然后将链接地址附加到以/
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')
正如在评论中提到的,修改循环列表是个坏主意!您可以用这些值填充一个新列表,或者列表理解可以是您的朋友:) 我把你的for循环分成了两个理解。首先要过滤掉以
#
然后将链接地址附加到以/
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')
作为一般建议,您应该避免修改正在循环的列表。这是否回答了您的问题?作为一般建议,您应该避免修改正在循环的列表。这是否回答了您的问题?