我是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之外的所有内容。我想我可以使用正则表达式,但这也应该起作用吗?
答案 0 :(得分:1)
您需要在函数末尾返回列表。
def filter_links(links):
filtered_links = []
for link in links:
if link.startswith(links[0]):
filtered_links.append(link)
return filtered_links