Не находит все указанные теги при парсинге

Рейтинг: 1Ответов: 1Опубликовано: 20.02.2023

За тест взял этот форум и попытался сделать запрос на поиск и после из результата получить этот список в неком виде. Но почему-то не находит все теги h3

import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup

url='https://stackoverflow.com/search?q='
txt='world'

txt = txt.lower()
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'}
response = requests.get(url+txt, headers = headers, timeout=15).content
domain_name = urlparse(url).scheme +'://'+ urlparse(url).netloc
soup = BeautifulSoup(response, 'html.parser')
# поиск результатов поиска
for h3_tag in soup.findAll("h3"):
    for a_tag in h3_tag.findAll("a"):
        href = a_tag.attrs.get("href")
        if href == "" or href is None or href == domain_name:
            continue
        # присоединяемся к URL, если он относительный (не абсолютная ссылка)
        try:
            href = urljoin(domain_name, href)
        except:
            continue
        # соединение с одинм из результатов и поиск текста
        respon = requests.get(href, timeout=15)
        lin = BeautifulSoup(respon.text.lower(), 'lxml')
        items = lin.stripped_strings
        for x in items:
            if txt in x:
                res = x + '\n--------------------------------\n'
                print(res + href + '\n\n')
        respon.close()

Получаю в response страницу верификации, так конекчусь через прокси. блин и как это обойти сохранив вход через прокси?, это важно. Смена юзер-агента не помогло

Ответы

▲ 1
response = requests.get(url, timeout=15) 
print(response.url)

# https://stackoverflow.com/search?q=` не хватает чего-то? 
# может быть и это
# https://stackoverflow.com/nocaptcha?s=1b1a1ad3-69e7-492d-8583-a451c775abda 

response = requests.get(url + txt, timeout=15)
print(response.url)

# https://stackoverflow.com/search?q=world
# или
# https://stackoverflow.com/nocaptcha?s=1b1a1ad3-69e7-492d-8583-a451c775abda 
 
soup = BeautifulSoup(response.content, 'html.parser')
for x in soup.find_all('div', {'class': "s-post-summary--content"}):
    print(f"https://stackoverflow.com{x.a['href']}")

# получаем что хотели
# или
# не чего, пустоту