Задать вопрос

Почему парсер выдает 403 авито?

import requests
import cloudscraper
from fake_useragent import UserAgent
ua = UserAgent()
PROXY_URLS = {
  'http': "http://109.248.7.158:10331",
  'https': "http://109.248.7.158:10331",
}

headers = {
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
    "cache-control": "max-age=0",
    'Upgrade-Insecure-Requests': '1',
    'User-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
    'refer': ua.random
}

cookies = dict()
url = "https://www.avito.ru/api/1/user/16e563a214f460550d6e8aa538a89336/extended-profile?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir"
# url = "https://www.avito.ru/"
# ---------------------- прямой запрос --------------------------------------
response = requests.get(url=url, 
                        #proxies=PROXY_URLS,
                
                        headers=headers,
                        
                        )

# ---------------------- вывод данных --------------------------------------
# вывод данных о статусе запроса
print(f'status_code={response.status_code}')
# сохранение в файл для разбора
with open('test_pars.html', 'w', encoding='utf-8') as f:
    f.write(response.text)


Такой вот скрипт, который недавно перестал работать, неизвестно почему. Выдает 403 при подключении к авито, не знаю что делать.
  • Вопрос задан
  • 4288 просмотров
Подписаться 3 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
@Anton27 Автор вопроса
Всем привет, ребят!
Большое спасибо за ваши ответы, решение было очень простым, нужно более детально заполнять шапку, брать готовые куки, их вы можете самостоятельно скачать(много плагинов для гугла). В общем, это все.
Вот код одного из решения этого вопроса
import ssl
import requests

from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager
from urllib3.util import ssl_

CIPHERS = """ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:AES256-SHA"""

class TlsAdapter(HTTPAdapter):

    def __init__(self, ssl_options=0, **kwargs):
        self.ssl_options = ssl_options
        super(TlsAdapter, self).__init__(**kwargs)

    def init_poolmanager(self, *pool_args, **pool_kwargs):
        ctx = ssl_.create_urllib3_context(ciphers=CIPHERS, cert_reqs=ssl.CERT_REQUIRED, options=self.ssl_options)
        self.poolmanager = PoolManager(*pool_args, ssl_context=ctx, **pool_kwargs)

session = requests.session()
adapter = TlsAdapter(ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
session.mount("http://", adapter)

try:
    r = session.request('GET', 'http://www.avito.ru')
    print(r.status_code)
except Exception as exception:
    print(exception)
Ответ написан
@yulenka_1911
Пример рабочего кода
import requests
from hyper.contrib import HTTP20Adapter
s = requests.Session()
s.mount('https://', HTTP20Adapter())
r = s.get('https://www.avito.ru/', headers = go_headers)
print(r.status_code)
Ответ написан
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
403 - доступ запрещён.
Надо обновить авторизационные куки
Ответ написан
Да, авито палит request запрос парсера последние дни сразу же. Долгое время парсил в многопоточном режиме через тор. Подсовывал и headers и подключение через Sessions() и куки из браузера и через прокси и через мобильную сеть — все равно ошибка 403.
Возможно, когда подключение через браузер обрабатывается какой то java script, а парсер через request запрос его не обрабатывает и палится.
Ответ написан
Ваш ответ на вопрос

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

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