【问题标题】:search pdf links from all over the website从整个网站搜索 pdf 链接
【发布时间】:2021-09-13 19:28:51
【问题描述】:

我想搜索一个网站并查找所有 pdf 链接。我知道 BeautifulSoup 有几种解决方案可以使用 标签查找 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 链接。我还能如何做到这一点?我愿意使用任何工具或库。

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup scrapy


    【解决方案1】:

    也许该网站具有动态内容。检查 BeautifulSoup 加载的 HTML 是否与在浏览器中检查网站时相同。如果不使用例如 selenium 来抓取具有动态加载内容的网站。

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox()
    html = driver.page_source
    soup = BeautifulSoup(html)
    
    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')
    driver.close()
    

    【讨论】:

    • 我们在哪里添加原始的基本网址?
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2011-04-03
    • 2011-01-07
    • 2018-12-09
    • 2013-04-02
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多