Падает парсер, выдает requests.exceptions.ConnectionError. Как исправить?

Код выдает ошибки, обработать не получается. Подскажите, как решить задачу, пожалуйста. Вот код:

headers = {
"Accept": "*/*",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0"}

first_links = []
for i in range(1, 10):
url = 'https://krs-pobierz.pl/szukaj?q=4110Z&page={}'.format(i)

while True:
    try:
        r = requests.get(url, headers)
    except requests.exceptions.ConnectionError:
        time.sleep(2)
        continue

soup = BeautifulSoup(r.text, 'lxml')
boxes = soup.find_all('div', class_='col-9')
for l in boxes:
    links = l.find('a').get('href')
    while True:
        try:
            q = requests.get(links)
        except requests.exceptions.ConnectionError:
            time.sleep(2)
            continue

    result = q.content
    soup = BeautifulSoup(result, 'lxml')
    try:
        kved_text = soup.find_all('td', class_='col-xs-8')[13].text
    except IndexError as ex:
        kved_text = '-'
    if(kved_text == 'Realizacja projektów budowlanych związanych ze wznoszeniem budynków (4110Z)'):
        first_links.append(links)
    else:
        continue

with open('first_links.txt', 'a') as f:
    for line in first_links:
        f.write(f'{line}\n')

Ответы (1 шт):

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

pip install fake-useragent requests tqdm

from tqdm import tqdm
from requests import Session
from fake_useragent import UserAgent
from bs4 import BeautifulSoup as Soup
import re

ua = UserAgent()

s = Session()
s.headers.update(
    {
        'User-Agent': ua.random
    }
)

urls = []

for i in range(1, 10):
    response = s.get(
        'https://krs-pobierz.pl/szukaj',
        params={
            'q': '4110Z',
            'page': i
        }
    )
    if not response.ok:
        print(response.status_code)
        continue

    soup = Soup(
        response.content,
        'html.parser'
    )

    search_area = soup.find('div', {'class': 'search-result'})
    urls += map(lambda x: x.get('href'), search_area.find_all('a'))

def filter_links(url):
    page_response = s.get(url)
    page_soup = Soup(page_response.content, 'html.parser')
    res = page_soup.find('td', class_='col-xs-8', text=re.compile(r'^.*?\(4110Z\).*$', flags=re.S))
    return res is not None

useful_links = []

for link in tqdm(urls):
    if filter_links(link):
        useful_links.append(
            link
        )

# 100%|██████████| 270/270 [01:14<00:00,  3.61it/s]

useful_links

['https://krs-pobierz.pl/budownictwo-ogolnoladowe-krzyszkowscy-spolka-z-ograniczona-odpowiedzialnoscia-spolka-komandytowa-i242025',
 'https://krs-pobierz.pl/upk-invest-spolka-z-ograniczona-odpowiedzialnoscia-i434695',
 'https://krs-pobierz.pl/wlasnosciowa-spoldzielnia-mieszkaniowa-pracownikow-krajowej-agencji-wydawniczej-prasa-ksiazka-ruch-kawka-w-likwidacji-i262044',
 'https://krs-pobierz.pl/gsg-group-spolka-z-ograniczona-odpowiedzialnoscia-i7170838',
 'https://krs-pobierz.pl/jm-bygg-service-spolka-z-ograniczona-odpowiedzialnoscia-i47692',
 'https://krs-pobierz.pl/spoldzielnia-budowlano-mieszkaniowa-srodmiescie-i134163',
 'https://krs-pobierz.pl/spoldzielnia-mieszkaniowa-im-aleksandra-fredry-i111984',
 'https://krs-pobierz.pl/atm-exchange-spolka-z-ograniczona-odpowiedzialnoscia-i294977',
 'https://krs-pobierz.pl/madison-capital-spolka-z-ograniczona-odpowiedzialnoscia-i7211652']

Вероятнее всего ошибка происходит из-за того, что Вы для каждого запроса используете requests.get что сосздает отдельную сессию для каждого запроса. Для парсинга целесообразней использовать Session

→ Ссылка