0

我是 Python 新手,正在努力将列表作为参数传递给函数。

我编写了一段代码来获取一个 url,从页面中提取所有链接并将它们放入一个列表 ( links=[]) 中。我想将此列表传递给一个函数,该函数过滤掉与起始链接(即列表中的第一个)不同域的任何链接并输出一个新列表(filtered_list = [])。这就是我所拥有的:

import requests
from bs4 import BeautifulSoup

start_url = "http://www.enzymebiosystems.org/"
r = requests.get(start_url)
html_content = r.text
soup = BeautifulSoup(html_content, features='lxml')
links = []
for tag in soup.find_all('a', href=True):
    links.append(tag['href'])


def filter_links(links):
    filtered_links = []
    for link in links:
        if link.startswith(links[0]):
            filtered_links.append(link)


print(filter_links(links))

当我运行它时,我得到一个未过滤的列表,在它下面,我得到无。

最终,我想将过滤后的列表传递给一个函数,该函数从主页上链接的域中的每个页面中获取 html,但我试图一次解决这个问题 1 个进程。任何提示将不胜感激,谢谢:)

编辑 我现在可以将 url 列表传递给filter_links()函数但是,我现在过滤掉了太多。最终我想通过这个程序传递几个不同的起始 url,所以我需要一种通用的方法来过滤与起始 url 在同一域内的 url。我使用了内置startswith函数,但它过滤掉了除起始 url 之外的所有内容。我想我可以使用正则表达式,但这也应该有用吗?

4

0 回答 0