Python 无法删除某些列表元素

Python 无法删除某些列表元素,python,beautifulsoup,Python,Beautifulsoup,我正在尝试获取特定网站的URL。我正在做这件事。有人能帮我吗?我可以在添加列表后删除列表中的一些元素(链接地址)。首先,我从特定网站(这里是swiggy.com)获取所有URL。尝试删除以“/”开头的列表元素(链接地址)之后。当我运行下面的程序时,它只是删除了其中的一些。在程序本身中,我打印了修改前后的所有列表(链接地址)元素 下面是python中的代码: 导入URL库 从urllib导入请求 从bs4导入BeautifulSoup def linkgetter(searchlink):

我正在尝试获取特定网站的URL。我正在做这件事。有人能帮我吗?我可以在添加列表后删除列表中的一些元素(链接地址)。首先,我从特定网站(这里是swiggy.com)获取所有URL。尝试删除以“/”开头的列表元素(链接地址)之后。当我运行下面的程序时,它只是删除了其中的一些。在程序本身中,我打印了修改前后的所有列表(链接地址)元素

下面是python中的代码:

导入URL库 从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')

正如在评论中提到的,修改循环列表是个坏主意!您可以用这些值填充一个新列表,或者列表理解可以是您的朋友:)

我把你的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')

作为一般建议,您应该避免修改正在循环的列表。这是否回答了您的问题?作为一般建议,您应该避免修改正在循环的列表。这是否回答了您的问题?