Почему прекрасный суп только дает мне первую запись на сайте? - PullRequest
1 голос
/ 21 сентября 2019

Я пытаюсь получить заголовок, дату и автора из статей, перечисленных на следующем веб-сайте: https://coreyms.com/

Это код, который я запустил

from bs4 import BeautifulSoup
import requests
import lxml
import csv
source = requests.get('http://coreyms.com').text
soup=BeautifulSoup(source,'lxml')

for match in soup.find_all('div',class_='site- 
container'):

    headline=match.main.header.h2.a.text
    print(headline)
    date=match.main.header.p.time.text
    print(date)
    author=match.main.header.p.span.a.span.text
    print(author)

    print()

Однако когда я запускаю этот код, я получаю информацию только из первого элемента.Любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Попробуйте следующим образом:

match = soup.find_all('h2')
for i in match:
    print(i.text)
    print(i.nextSibling.nextSibling.find('time').text)
    print(i.nextSibling.nextSibling.find('span').text)
    print('====')

Вывод:

Python Threading Tutorial: Run Code Concurrently Using the Threading Module
September 12, 2019
Corey Schafer
====
Update (2019-09-03)
September 3, 2019
Corey Schafer
====

и т. Д.

0 голосов
/ 21 сентября 2019

Я бы выбрал более быстрый метод, который заключается в выборе всех тегов статьи, а затем в цикле над этими селекторами классов, чтобы получить желаемую информацию

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://coreyms.com/')
soup = bs(r.content, 'lxml')

for article in soup.select('article'):
    title = article.select_one('.entry-title-link').text
    date = article.select_one('.entry-time').text
    author = article.select_one('.entry-author-name').text
    print(title, date, author)
...