@san_m_m

Как исправить ошибку при парсинге?

Добрый день!

Написал код, который парсит страницы сайта.

import requests
import bs4
import urllib.parse
from bs4 import BeautifulSoup 
import pandas as pd


pto_numbers = []

for pto_id in range(1, 5000):
    pto_id
    pto_numbers.append(pto_id)

status_i = []
nomer_pto_i = []
name_company_i = []
adress_i = []
nomer_pto_i = []
all_data = []
telefon_i = []
email_i = []

def get_pto_data(pto_number: int) -> str:
    headers = {
        "Accept": "application/xml, text/xml, */*; q=0.01",
        "DNT": "1",
        "X-Requested-With": "XMLHttpRequest",
        "Faces-Request": "partial/ajax",
        "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Origin": "http://oto-register.autoins.ru",
        "Referer": "http://oto-register.autoins.ru/pto/",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6"
    }

    session = requests.Session()

    main_page_data = session.get("http://oto-register.autoins.ru/pto/")
    main_page = bs4.BeautifulSoup(main_page_data.text)

    view_state_element = main_page.select('[name="javax.faces.ViewState"]')
    if view_state_element is None or len(view_state_element) == 0:
        return None
    else:
        view_state_data = view_state_element[0]["value"]

    data = f"javax.faces.partial.ajax=true&javax.faces.source=mainForm%3AremoteCommandSetupPtoId_action&javax.faces.partial.execute=mainForm%3AremoteCommandSetupPtoId_action&javax.faces.partial.render=mainForm%3AcontentTabsPanel+mainForm%3AptoPanel&mainForm%3AremoteCommandSetupPtoId_action=mainForm%3AremoteCommandSetupPtoId_action&ptoId={str(pto_number)}&mainForm=mainForm&mainForm%3Aj_idt8=&mainForm%3Aj_idt9=&mainForm%3Aj_idt10=&mainForm%3Aj_idt11=&javax.faces.ViewState={urllib.parse.quote_plus(view_state_data)}"

    response = session.post("http://oto-register.autoins.ru/pto/index.xhtml",
                            headers=headers,
                            data=data)

    return response.text if response.status_code == 200 else None


for pto_number in pto_numbers:
    test = get_pto_data(pto_number)

    #print(test)


Код работает, но если парсить большое количество страниц, то интерпретатор выдает следующую ошибку

NewConnectionError: <urllib3.connection.HTTPConnection object at 0x000001DE0DAD5C10>: Failed to establish a new connection: [WinError 10060] Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера


Как избежать данное обстоятельство?
  • Вопрос задан
  • 251 просмотр
Решения вопроса 1
@Shachi
Начинающий разработчик на Python
Вероятно сайт блокирует подключение из-за большого количества обращений. Как минимум нужно поставить небольшую паузу в цикле.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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