我想搜索一个网站并查找所有 pdf 链接。我知道 BeautifulSoup 有几种解决方案可以使用 < a > 标签查找 pdf 文件,但我想使用基本 url 搜索整个域,而不仅仅是链接的页面。
我的想法是 a) 首先在整个网站上搜索所有子链接,然后 b) 过滤掉具有 .pdf 扩展名的链接。对于第一部分,我尝试了这个https://github.com/mujeebishaque/extract-urls:
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
user_input_url = "https://www.aurednik.de/"
if not user_input_url or len(user_input_url) < 1:
raise Exception("INFO: Invalid Input")
_start = user_input_url.find('//')
_end = user_input_url.find('.com')
readable_website_name = user_input_url[_start+2:_end].strip()
try:
website_content = requests.get(user_input_url.strip()).text
except:
check_internet = requests.get('https://google.com').status_code
if check_internet != requests.codes.ok:
raise ConnectionError("ERROR: Check internet connection.")
_soup = BeautifulSoup(website_content, features='lxml')
internal_url_links = []
external_url_links = []
for link in _soup.find_all('a', href=True):
if readable_website_name in link.get('href'):
internal_url_links.append(link['href'])
if readable_website_name not in link.get('href') and len(link.get('href')) > 3:
external_url_links.append(link['href'])
print(internal_url_links, '\n')
print(external_url_links, '\n')
我期待它能够抓取并返回所有链接,例如 https://www.aurednik.de/info-service/downloads/#unserekataloge
和https://www.aurednik.de/downloads/AUREDNIK_Haupt2021.pdf 但事实并非如此。我根本看不到第二个 pdf 链接,对于第一个链接,我只看到
/info-service/downloads/#unserekataloge
当我打印出外部链接时。我想要完整的链接,最好还有网站域上的所有 pdf 链接。我还能如何做到这一点?我愿意使用任何工具或库。