Как перебрать oop ссылки и очистить содержание новостных статей с BeautifulSoup - PullRequest
1 голос
/ 08 мая 2020

Я новичок в Python, я хотел бы получать содержание и заголовки всех новостных статей с этой страницы: https://www.nytimes.com/search?query=china+COVID-19

Однако вывод моих текущих кодов хранит все абзацы из 10 статей в 1 список. Интересно, как я могу сохранить каждый абзац в dict, статье, к которой он принадлежит, и сохранить весь dict в 1 список?

Любая помощь будет принята с благодарностью!

import requests
from bs4 import BeautifulSoup
import json

response=requests.get('https://www.nytimes.com/search?query=china+COVID-19')
response.encoding='utf-8'
soupe=BeautifulSoup(response.text,'html.parser')

links = soupe.find_all('div', class_='css-1i8vfl5')

pagelinks = []
for link in links:
    url = link.contents[0].find_all('a')[0] 
 pagelinks.append('https://www.nytimes.com'+url.get('href')) 


articles=[]  

for i in pagelinks:
    response=requests.get(i)
    response.encoding='utf-8'
    soupe=BeautifulSoup(response.text,'html.parser') 
    for p in soupe.select('section.meteredContent.css-1r7ky0e div.css-53u6y8'):
        articles.append(p.text.strip())
print('\n'.join(articles))

1 Ответ

2 голосов
/ 08 мая 2020
import urllib3
from bs4 import BeautifulSoup as bs

def scrap(url):
    http = urllib3.PoolManager()
    response = http.request("GET", url)
    soup_page = bs(response.data, 'lxml') # you have to install lxml package
    # pip install lxml
    articles = []

    containers = soup_page.findAll("div", attrs={'class': "css-1i8vfl5"})

    for container in containers:
        title = container.find('h4', {'class':'css-2fgx4k'}).text.strip()
        description = container.find('p', {'class':'css-16nhkrn'})

        article = {
            'title':title,
            'description':description
        }

        articles.append(article)
    return articles

print (scrap ("https://www.nytimes.com/search?query=china+COVID-19") [0] # для отображения словаря первой статьи)

...