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 шт):

Автор решения: AnnaBazueva

Всё правильно, Вы что-то делаете не так...

Добавила в код пару строчек:

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&amp;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.

→ Ссылка
Автор решения: Sobolenko.Evgeniy

Для того, чтобы Авито слал ответ, нужно добавить некоторые заголовки в запрос. Так должно работать:

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)
→ Ссылка