#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
Я просмотрел предыдущие ответы, но ни один из них не показался применимым. Я создаю скребок quizlet с открытым исходным кодом для извлечения всех ссылок из класса (например https://quizlet.com/class/3675834 /). В этом случае тегом является a, а классом является «UILink». Но когда я использую следующий код, возвращаемый список не содержит элемента, который я ищу. Это из-за проблемы JavaScript, описанной здесь?
Я попытался использовать предыдущий метод импорта папки, как написано здесь, но он не содержит URL-адресов.
Как я могу очистить эти URL-адреса?
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"
}
url = 'https://quizlet.com/class/8536895/'
response = requests.get(url, verify=False, headers=headers)
soup = BeautifulSoup(response.text,'html.parser')
b = soup.find_all("a", class_="UILink")
Ответ №1:
Вы не сможете напрямую очищать динамические веб-страницы, используя just requests
. То, что вы видите в браузере, — это полностью отображаемая страница, обработанная браузером.
Чтобы очистить данные с таких веб-страниц, вы должны следовать любому из приведенных ниже подходов.
-
Используйте
requests-html
вместоrequests
запросы на установку pip-html
scraper.py
from requests_html import HTMLSession
from bs4 import BeautifulSoup
session = HTMLSession()
url = 'https://quizlet.com/class/8536895/'
response = session.get(url)
response.html.render() # render the webpage
# access html page source with html.html
soup = BeautifulSoup(response.html.html, 'html.parser')
b = soup.find_all("a", class_="UILink")
print(len(b))
Примечание: для рендеринга страницы используется безголовый браузер (chromium) под капотом. Поэтому он может время от времени прерываться или быть немного медленным.
- Используйте selenium webdriver
Используется driver.get(url)
для получения страницы и передачи источника страницы в beautiful Soup с driver.page_source
Примечание: запустите это и в безголовом режиме, и иногда может быть некоторая задержка.