Samanta-Smith
@Samanta-Smith

Не могу понять, почему не работает парсер?

Извините за вопрос. Я пытаюсь написать простой парсер на bs, который будет извлекать ссылки из выдачи, и сталкиваюсь с определенными трудностями. Когда я парсю все ссылки на страннице через следующий код , то получаю некий результат(до того момента пока яндекс не начинает посылать капчу).
from bs4 import BeautifulSoup
from bs4.dammit import EncodingDetector
import requests
from fake_useragent import UserAgent
UserAgent().chrome

meme_page = 'https://www.yandex.ru/search/?text=%D0%9F%D0%BB%D1%8F%D0%B6%20%D0%B4%D0%BB%D1%8F%20%D0%BD%D1%83%D0%B4%D0%B8%D1%81%D1%82%D0%BE%D0%B2%20%D0%B2%20%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&lr=213/'
response = requests.get(meme_page, headers={'User-Agent': UserAgent().chrome})
html = response.content
soup = BeautifulSoup(html, 'html.parser')

for link in soup.findAll('a',   href=True):
    print(link['href'])

Но если я пытаюсь получить доступ к ссылкам из результатов выдачи, то получаю пустоту.
from bs4 import BeautifulSoup
from bs4.dammit import EncodingDetector
import requests
from fake_useragent import UserAgent
UserAgent().chrome

meme_page = 'https://www.yandex.ru/search/?text=%D0%9F%D0%BB%D1%8F%D0%B6%20%D0%B4%D0%BB%D1%8F%20%D0%BD%D1%83%D0%B4%D0%B8%D1%81%D1%82%D0%BE%D0%B2%20%D0%B2%20%D0%BC%D0%BE%D1%81%D0%BA%D0%B2%D0%B5&lr=213/'
response = requests.get(meme_page, headers={'User-Agent': UserAgent().chrome})
html = response.content
soup = BeautifulSoup(html, 'html.parser')

for link in soup.findAll('a', {'class':'link link_theme_outer path__item i-bem link_js_inited'},   href=True):
    print(link['href'])

Почему так происходит? Где напартачено и как это исправить? Спасибо.
  • Вопрос задан
  • 424 просмотра
Решения вопроса 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
Потому что выдача формируется JavaScript-ом. Использовать селениум.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы