【发布时间】:2022-01-05 10:56:07
【问题描述】:
我正在构建一个爬虫,它可以下载给定网站及其子页面的所有 .pdf 文件。为此,我围绕以下简化的递归函数使用了内置功能,该函数检索给定 URL 的所有链接。
但是这会变得很慢,它抓取给定网站的时间越长(每个 URL 可能需要 2 分钟或更长时间)。 我不太清楚是什么原因造成的,非常感谢有关需要更改哪些内容以提高速度的建议。
import re
import requests
from bs4 import BeautifulSoup
pages = set()
def get_links(page_url):
global pages
pattern = re.compile("^(/)")
html = requests.get(f"https://www.srs-stahl.de/{page_url}").text
soup = BeautifulSoup(html, "html.parser")
for link in soup.find_all("a", href=pattern):
if "href" in link.attrs:
if link.attrs["href"] not in pages:
new_page = link.attrs["href"]
print(new_page)
pages.add(new_page)
get_links(new_page)
get_links("")
【问题讨论】:
-
你可能会陷入一些无限递归,不确定它是否与你的问题有关,但你必须统一你的页面列表 (pages = list(set(pages)) 否则如果页面 A 带你到页面 B 和页面 B 带你到页面 A 你会永远卡在那里
-
如果 link.attrs["href"] 不在页面中,这与我所做的不一样吗?
-
可能只是服务器问题
-
添加时间打印机,可能是服务器延迟你的请求越来越多的情况。
标签: python beautifulsoup web-crawler