поиск pdf-ссылок по всему сайту

avatar
x89
1 июля 2021 в 18:12
66
1
0

Я хочу выполнить поиск на веб-сайте и найти все ссылки на PDF-файлы. Я знаю, что у BeautifulSoup есть несколько решений для поиска pdf-файлов с использованием тегов <a>, но я хочу искать весь домен, используя базовый URL-адрес, а не только ссылку на страницу.

Моя идея заключалась в том, чтобы а) сначала выполнить поиск всех ссылок на всем веб-сайте, а затем б) отфильтровать ссылки с расширением .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 на домене веб-сайта. Как еще я мог добиться этого? Я готов использовать любые инструменты и библиотеки.

Источник

Ответы (1)

avatar
Mateusz Dorobek
1 июля 2021 в 18:43
0

Возможно, на сайте есть динамический контент. Убедитесь, что HTML-код, загруженный BeautifulSoup, такой же, как при просмотре веб-сайта в браузере. Если не использовать, например, селен для очистки веб-сайта с динамически загружаемым контентом.

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()
x89
1 июля 2021 в 19:36
0

где мы добавим исходный базовый URL здесь?