Как из страниц вытащить посты и заголовки? Надо из хабра. url = f"https://habr.com/ru/post/{n}/"
import requests as rq
from bs4 import *
global url, soup
f = True
while f:
try:
for n in range(5):
url = f"https://habr.com/ru/post/{n}/"
headers = {
'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0 IceDragon/65.0.2'
}
response = rq.get(url, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
postNews = soup.findAll('h1', class_='tm-article-snippet__title tm-article-snippet__title_h1')
textNews = soup.findAll('div', class_='tm-article-body')
for name in postNews:
print(name.text)
for Text in textNews:
print(Text.text)
with open('notebook.txt', 'w') as f:
for data in postNews:
f.write(data.text)
except:
pass
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Зачем вам внешний вечный цикл я не понял. А так в целом:
- Открываем файл на запись заранее, один раз
- Идём циклом по страницам, парсим их
- Найденные элементы записываем в файл
import requests as rq
from bs4 import *
global url, soup
#f = True
#while f:
try:
with open('notebook.txt', 'w') as f:
for n in range(5):
url = f"https://habr.com/ru/post/{n}/"
print(url)
headers = {
'User_Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0 IceDragon/65.0.2'
}
response = rq.get(url, headers=headers)
soup = BeautifulSoup(response.content, "html.parser")
postNews = soup.findAll('h1', class_='tm-article-snippet__title tm-article-snippet__title_h1')
textNews = soup.findAll('div', class_='tm-article-body')
for name in postNews:
print(name.text)
f.write(name.text)
for Text in textNews:
print(Text.text)
f.write(Text.text)
except:
pass
Автор решения: gil9red
→ Ссылка
Заметил несколько проблем:
- Ненужный бесконечный цикл
- Цикл по страницам, по сути, неправильно используется - только последняя итерация имеет значение
- Для получения заголовка и тела поста используется поиск по элементам, когда на странице может быть только один
- Ненужные глобальные переменные
Накидал пример решения:
import requests
from bs4 import BeautifulSoup
for i in range(1, 5 + 1):
rs = requests.get(f'https://habr.com/ru/post/{i}/')
root = BeautifulSoup(rs.content, 'html.parser')
error_el = root.select_one('.tm-error-message__title')
if error_el:
title = error_el.get_text(strip=True)
text = ''
else:
title = root.select_one('.tm-article-snippet__title').get_text(strip=True)
text = root.select_one('.tm-article-body').get_text(strip=True)
print(i)
print(title)
print(text)
print()
Результат:
1
Wiki-FAQ для Хабрахабра
Привет!Для сборника ответов на Часто Задаваемые Вопросы мы решили использовать идею wiki, поскольку, как нам кажется, нет смысла писать одному конкретному человеку FAQ для такого сайта, как Хабрахабр. Все равно останутся люди, у которых останутся вопросы.Посему, обращаюсь к читателям группы со следующим вопросом: какой wiki-движок из доступных, по-вашему, идеально подходит для составления «коллективного» ЧАВО по сайту?
2
Мы знаем много недоделок на сайте… но!
Кроме неработающих и отсутствующих страниц, о которых мы знаем, есть ошибки о которых мы ничего не знаем. Чем они отличаются? Хм… трудный вопрос. Пишите обо всем, а мы разберемся! =) И ничего не забудем.Хабрахабр!
3
Страница не найдена
4
Маслов, Сокур и партнеры пиарят Google в России
Насколько я знаю, Google выбрал агентство«Маслов, Сокур и партнеры»для pr-сопровождения в России на местном рынке. Недавно они провелинеформальную встречу с журналистами, а сегодня в Ведомостях была опубликована статья-страшилка:«Рамблер должен бояться».
5
Доступ закрыт