Ошибка в работе парсера, запись в Excel файл
from bs4 import BeautifulSoup
import requests as req
import pandas as pd
link = 'https://habr.com/ru/top/page2/'
def make_Hyperlink(text, link):
return '=HYPERLINK("%s", "%s" )' % (link.format(link), text)
def goParse(link):
titles, links, times, hyperlinks = [], [], [], []
counter = 1
while (True):
print(counter)
res = req.get(link + str(counter))
html = BeautifulSoup(res.text, 'lxml')
times += html.find_all('span', class_='post_time')
links_a = html.find_all('a', class_='post__title_link')
page = html.find_all('a', id='next_page')
for a in links_a:
hyperlinks.append(make_Hyperlink(a.text, a['href']))
if page == 'None':
break
else:
counter += 1
for i, time in enumerate(times):
times[i] = time.text
df = pd.DataFrame()
df['Время'] = times
df['Ссылки и заголовки'] = hyperlinks
writer = pd.ExcelWriter('./habr.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='лист 1', index=False)
writer.sheets['лист 1'].set_column('A:A', 20)
writer.sheets['лист 1'].set_column('B:B', 140)
writer.save()
goParse(link)
Работает только счётчик и ему плевать сколько там всего страниц, он идет бесконечно, даже эксель файл не создается.
Ответы (1 шт):
Автор решения: Jack_oS
→ Ссылка
Вы к изначальной ссылке вида
link = 'https://habr.com/ru/top/page2/'
дописываете counter
res = req.get(link + str(counter))
в итоге получаете 404 для адреса:
'https://habr.com/ru/top/page2/2'
Меняйте номер страницы в goParse():
def goParse():
titles, links, times, hyperlinks = [], [], [], []
page_num = 2
while True:
print(page_num)
res = requests.get(f'https://habr.com/ru/top/page{page_num}/')
html = BeautifulSoup(res.text, 'lxml')
times += html.find_all('span', class_='post_time')
links_a = html.find_all('a', class_='post__title_link')
page = html.find_all('a', id='next_page')
for a in links_a:
hyperlinks.append(make_Hyperlink(a.text, a['href']))
if page == 'None':
break
else:
page_num += 1
print(hyperlinks)
PS page_num должен начинаться с 2
UPD запуск goParse() с while page_num < 5: (страницы 2-4) отдает hyperlinks с 38 ссылками/тайтлами:
[
'=HYPERLINK("https://habr.com/ru/post/538870/", "Кодирование Рида-Соломона для чайников" )',
'=HYPERLINK("https://habr.com/ru/company/audiomania/blog/540612/", "Что послушать, когда пишешь код: бесплатные миксы, заглушка для второго монитора и эмбиент-плеер" )',
'=HYPERLINK("https://habr.com/ru/post/541322/", "Author.today — пираты под флагом копирайта?" )', '=HYPERLINK("https://habr.com/ru/company/itelma/blog/540784/", "Тренды 2021 в индустрии полупроводников" )',
...
'=HYPERLINK("https://habr.com/ru/post/540130/", "Скромное обаяние конспирологии" )',
'=HYPERLINK("https://habr.com/ru/post/541330/", "[приглашение] Запись саундтреков в жанре киберпанк для OSINT инструмента" )',
'=HYPERLINK("https://habr.com/ru/company/rostelecom/blog/541208/", "Как мы автоматизировали тестирование верстки сайта с помощью скриншотов" )'
]