将列表作为参数传递给python中的函数

时间:2019-12-04 16:42:55

标签: python function web-scraping beautifulsoup parameter-passing

我是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))

运行此命令时,会得到一个未过滤的列表,在该列表下,我将显示None。

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

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

1 个答案:

答案 0 :(得分:1)

您需要在函数末尾返回列表。

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