Не идёт парсинг через BeautifulSoup
Этот код должен парсить новости с сайта, но почему-то он выдаёт только статус о подключении и гасится. Не знаю в чём подвох. Помогите, пожалуйста)
from bs4 import BeautifulSoup
import requests
url = 'https://www.techcult.ru/technology'
page = requests.get(url)
print(page.status_code)
new_news = []
news = []
soup = BeautifulSoup(page.text, "html.parser")
news = soup.findAll('a', class_='pad pad1 pad2')
for i in range(len(news)):
if news[i].find('h2') is not None:
new_news.append(news[i].text)
for i in range(len(new_news)):
print(new_news[i])
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Заметил, что без браузерного User-Agent сайт держит подключение без ответа.
А еще, все новости находятся в теге a с классом pad, поэтому проще всего описать это css-селектором: a.pad
from bs4 import BeautifulSoup
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
}
rs = requests.get('https://www.techcult.ru/technology', headers=headers)
root = BeautifulSoup(rs.content, "html.parser")
for a in root.select('a.pad'):
url = a['href']
title = a.h2.get_text(strip=True)
print(title, url)
# Фильтр из аэрогеля бесплатно и быстро очистит любые объемы воды https://www.techcult.ru/technology/8196-filtr-iz-aerogelya-bystro-ochishaet-lyubye-obemy-vody
# Система тросиков Wireality сделает виртуальные предметы реальными и осязаемыми https://www.techcult.ru/technology/8199-tehnologiya-wireality-delaet-virtualnye-predmety-realnymi
# Графен превосходно справился с защитой труб от бактериальной коррозии https://www.techcult.ru/technology/8193-grafen-zashishaet-truby-ot-bakterialnoj-korrozii
# Алмазные нанонити запасают энергию в три раза эффективнее Li-Ion батарей https://www.techcult.ru/technology/8194-nanoniti-zapasayut-energiyu-effektivnee-litij-ionnyh-batarej
# Искусственный интеллект Fujitsu справляется с управлением Токийским портом лучше людей https://www.techcult.ru/technology/8190-ii-spravlyaetsya-s-upravleniem-tokijskim-portom-luchshe-lyudej
# ...
Автор решения: Wairua
→ Ссылка
Ваш код + 1 импорт и замена двух строк
import re
from bs4 import BeautifulSoup
import requests
url = 'https://www.techcult.ru/technology'
page = requests.get(url)
print(page.status_code)
new_news = []
news = []
soup = BeautifulSoup(page.text, "html.parser")
news = soup.findAll('a', class_=re.compile(r'pad\d?')) # меняем эту строчку вашего кода на ту что здесь
for i in range(len(news)):
if news[i].find('h2') is not None:
new_news.append(news[i].h2.text) # news[i].text -> news[i].h2.text
for i in range(len(new_news)):
print(new_news[i])