Как извлечь динамически генерируемые ссылки с веб-сайта с помощью Python?

Я пишу код, в котором мне нужно получить все ссылки/URL-адреса с определенного веб-сайта, но кажется, что ссылки генерируются динамически и могут заполняться с использованием JavaScript или другого механизма динамической загрузки контента после получения исходного HTML.

Изначально я использовал следующий код:

import requests
from bs4 import BeautifulSoup


url = 'https://www.example.com/'
reqs = requests.get(url)
soup = BeautifulSoup(reqs.text, 'html.parser')

urls = []
for link in soup.find_all('a'):
    print(link.get('href'))

Однако этот подход не сработал, поскольку ссылки не были записаны непосредственно в HTML. Вместо этого они генерируются позже с помощью кода JavaScript. Как я могу извлечь эти динамически генерируемые ссылки? Простая подсказка была бы очень признательна.

Селен (selenium.dev)?

Scott Hunter 01.07.2024 16:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы в том, что HTML не содержит ссылок, поэтому вам нужен подход, позволяющий запускать javascript перед очисткой страницы. Мне нравится selenium webdriver и chromedriver

from bs4 import BeautifulSoup
from selenium import webdriver

url = 'https://www.example.com/'

driver = webdriver.Chrome() # Open an automated browser
driver.get(url)             # Navigate to target page

soup = BeautifulSoup(       # Parse content _after_ any dynamic javascript stuff
    DRIVER.page_source,
    'html.parser'
)

urls = []
for link in soup.find_all('a'):
    print(link.get('href'))

Спасибо, это сработало! Я пробовал использовать Selenium WebDriver для очистки контента с веб-сайтов (более 250), но это довольно медленно. Есть ли другой метод, который я могу использовать?

Liam Mason 01.07.2024 19:20

Вы можете использовать множественную обработку, чтобы запускать несколько веб-очисток одновременно и просто разделить количество ссылок на количество процессов, которые вы хотите запустить. например 250/5 = 50 страниц на каждого. Вы найдете множество программ, которым нужно, чтобы одновременно происходило несколько вещей, использующих этот метод.

Morddekaiser 02.07.2024 09:05

Другие вопросы по теме