无法删除某些列表元素

时间:2020-03-10 10:20:22

标签: python beautifulsoup

我正在尝试获取特定网站的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')

1 个答案:

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