Я пишу код, в котором мне нужно получить все ссылки/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. Как я могу извлечь эти динамически генерируемые ссылки? Простая подсказка была бы очень признательна.
Вы правы в том, что 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), но это довольно медленно. Есть ли другой метод, который я могу использовать?
Вы можете использовать множественную обработку, чтобы запускать несколько веб-очисток одновременно и просто разделить количество ссылок на количество процессов, которые вы хотите запустить. например 250/5 = 50 страниц на каждого. Вы найдете множество программ, которым нужно, чтобы одновременно происходило несколько вещей, использующих этот метод.
Селен (selenium.dev)?