Python BeautifulSoup проблема с выводом
Пишу парсер для авито на BeautifulSoup.
Стоит цель вывести все ссылки со страницы авито по запросу "геймпад" в моем городе.
Вроде как все сделано правильно, но при запуске программы получаю абсолютно ничего.
Может вышли обновления библиотеки и я что то сделал не так?
from bs4 import BeautifulSoup
import requests
url = "https://www.avito.ru/serov?q=геймпад"
request = requests.get(url=url)
soup = BeautifulSoup(request.text, "html.parser")
all_links = soup.find_all("a", class_="styles-module-root-iSkj3")
for link in all_links:
print(link)
Ответы (2 шт):
Всё правильно, Вы что-то делаете не так...
Добавила в код пару строчек:
from bs4 import BeautifulSoup
import requests
from rich import print
url = 'https://www.avito.ru/serov?q=геймпад'
request = requests.get(url=url)
soup = BeautifulSoup(request.text, 'lxml')
print(soup)
all_links = soup.find_all('a', class_='styles-module-root-iSkj3')
for link in all_links:
print(link)
output:
// ...
<h2 class="firewall-title">Доступ ограничен: проблема с IP</h2>
<form autocomplete="off" class="form js-submit js-firewall-form">
<div id="h-captcha" style="display: none">
<p class="text">
Иногда такое случается — чтобы вернуться на сайт, поставьте галочку и нажмите «Продолжить».
</p>
<div class="h-captcha" data-callback="sethCaptchaResponse" data-sitekey="070db171-ddb9-4c93-b7f6-d25d3c9d7e28"></div>
<textarea id="h-captcha-response" name="e-captcha-response" style="display: none"></textarea>
<script>
function sethCaptchaResponse(response) {
document.getElementById('h-captcha-response').value = response;
}
</script>
<script async="" defer="" src="https://hcaptcha.com/1/api.js?hl=ru&recaptchacompat=off"></script>
</div>
<fieldset class="js-form-captcha form-fieldset form-captcha form-captcha-inline" id="inner-captcha" style="display: none">
<p class="text">
Иногда такое случается — чтобы вернуться на сайт, введите символы с картинки.
</p>
// ...
Как видите — Avito предлагает решить капчу.
Вы ни чего не сделали, чтоб сайт Avito считал Ваш скрипт "ЧЕЛОВЕКОМ"...
Подмените headers
в get
-запросе, в случае с Avito может потребоваться использовать cookies
и попробуйте авторизованный парсинг.
Вместо BeautifulSoup, можете использовать Scrapy иногда совместно с Playwright.
Для того, чтобы Авито
слал ответ, нужно добавить некоторые заголовки в запрос.
Так должно работать:
import requests
from fake_useragent import UserAgent
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'www.avito.ru',
'Upgrade-Insecure-Requests': '1',
'User-Agent': UserAgent().random,
'X-Compress': 'null'
}
url = 'https://www.avito.ru/serov?q=геймпад'
response = requests.get(url=url, headers=headers)