Python. Парсинг. Как со всех страниц?

Рейтинг: -1Ответов: 3Опубликовано: 08.08.2023
import bs4
import requests
import xlsxwriter

main_url = 'https://www.21vek.by/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/115.0.0.0 Safari/537.36'}
gata = [['Наименование', 'Ссылка']]



def get_suol(url):
   res = requests.get(url, headers)
   return bs4.BeautifulSoup(res.text, 'html.parser')


categories_page = get_suol(main_url+'notebooks/page:1/')
categories = categories_page.find_all('dt', class_='result__root') 


for cat in categories:
    url = cat.find('a')['href'].strip()
    fone = cat.find('span', class_='result__name').find(text=True).strip()
    gata.append([fone, url])


with xlsxwriter.Workbook('categories.xlsx') as workbook:
  worksheet = workbook.add_worksheet()

  for pow_num, info in enumerate(gata):
      worksheet.write_row(pow_num, 0, info)
  worksheet.autofit()

Ответы

▲ 0Принят
from bs4 import BeautifulSoup
import requests
import xlsxwriter

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'}
gata = [['Наименование', 'Ссылка']]


for i in range(1, 19):
   main_url = 'https://www.21vek.by/notebooks/page:{}/'.format(i)
   response = requests.get(main_url, headers)
   soup = BeautifulSoup(response.text, 'html.parser')
   categories = soup.find_all('dt', class_='result__root')
   for cat in categories:
       url = cat.find('a')['href'].strip()
       fone = cat.find('span', class_='result__name').find(text=True).strip()
       gata.append([fone, url])


with xlsxwriter.Workbook('categories.xlsx') as workbook:
    worksheet = workbook.add_worksheet()

    for pow_num, info in enumerate(gata):
        worksheet.write_row(pow_num, 0, info)
    worksheet.autofit()
▲ 0

Обычно пагинацию проходят через связку for и range. При этом проходятся по всем страницам. Добавляю в url номер страницы или как у вас реализовано на сайте.

▲ 0

@Ariadlif Вот для примера страница (https://ru.stackoverflow.com/questions/tagged/python?tab=newest&page=1) Если вы ее будете листать, то увидите что меняется page=2,3,4,5 и т.д. в зависимости от того сколько вам нужно страниц. Допустим вам интересны первые 5 страниц.

 `url = "https://ru.stackoverflow.com/questions/tagged/python?tab=newest&page="

 link_list = []
 for num in range(1,6):
     link_list.append(url+str(num))
 print(link_list)

 link_list2 = [url+str(num) for num in range(1,6)]
 print(link_list2)`