Перейдите на следующую страницу и извлеките данные

#web-scraping #beautifulsoup #python-requests #web-crawler

Вопрос:

я пытаюсь извлечь все основные тексты в последних обновлениях из ‘https://www.bbc.com/news/coronavirus’

я успешно извлек основные тексты с первой страницы (1 из 50).

Я хотел бы перейти на следующую страницу и повторить этот процесс еще раз.

Это код, который я написал.

 from bs4 import BeautifulSoup as soup
import requests

links = []
header = []
body_text = []

r = requests.get('https://www.bbc.com/news/coronavirus')
b = soup(r.content,'lxml')

# Selecting Latest update selection
latest = b.find(class_="gel-layout__item gel-3/5@l")
# Getting title
for news in latest.findAll('h3'):
    header.append(news.text)
    #print(news.text)

# Getting sub-links
for news in latest.findAll('h3',{'class':'lx-stream-post__header-title gel-great-primer-bold qa-post-title gs-u-mt0 gs-u-mb-'}):
    links.append('https://www.bbc.com'   news.a['href'])

# Entering sub-links and extracting texts
for link in links:
    page = requests.get(link)
    bsobj = soup(page.content,'lxml')

    for news in bsobj.findAll('div',{'class':'ssrcss-18snukc-RichTextContainer e5tfeyi1'}):
        body_text.append(news.text.strip())
        #print(news.text.strip())
 

Как мне перейти на следующую страницу ?

Ответ №1:

Не уверен, какой именно текст вам нужен, но вы можете пройти через api.

 import requests

url = 'https://push.api.bbci.co.uk/batch'
headers = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Mobile Safari/537.36'}

for page in range(1,51):
    payload = '?t=/data/bbc-morph-lx-commentary-data-paged/about/63b2bbc8-6bea-4a82-9f6b-6ecc470d0c45/isUk/false/limit/20/nitroKey/lx-nitro/pageNumber/{page}/version/1.5.4?timeout=5'.format(page=page)

    jsonData = requests.get(url payload, headers=headers).json()

    results = jsonData['payload'][0]['body']['results']
    for result in results:
        print(result['title'])
        print('t',result['summary'],'n')
 

Комментарии:

1. Как вы вообще связались с вирусом BBC/Corona , я не могу полностью понять , что здесь произошло, не могли бы вы немного объяснить ?

2. Данные извлекаются через их api. Вы можете увидеть источник этого, посмотрев на Инструменты разработки (ctrl-shift-i) и заглянув в раздел Сеть -> XHR. Вы увидите данные там, и это всего лишь вопрос получения URL-адреса и соответствующих параметров