Как анализировать только цитаты с помощью BeautifulSoup? - PullRequest
0 голосов
/ 10 июля 2020

Итак, я пытаюсь разобрать цитаты с веб-сайта, но в классе Result есть несколько абзацев. Есть ли способ игнорировать дату и автора и выбирать материал только в кавычках? Значит, у меня останется только список цитат? Кстати, с помощью BeautifulSoup. Спасибо.

<div class="result">
  <p><strong>Date:</strong> February 2, 2019</p>
  <p>"My mind had no choice but to drift into an elaborate fantasy realm."</p>

  <blockquote>
    <p class="attribution">&mdash; Pamela, Paul</p>
  </blockquote>
  <a href="/metaphors/25249" class="load_details">preview</a> |
  <a href="/metaphors/25249" title="Let Children Get Bored Again [from The New York Times]">full record</a>
  <div class="details_container"></div>
</div>
<div class="result">
  <p><strong>Date:</strong> February 2, 2019</p>
  <p>"You let your mind wander and follow it where it goes."</p>
  <blockquote>
    <p class="attribution">&mdash; Pamela, Paul</p>
  </blockquote>
  <a href="/metaphors/25250" class="load_details">preview</a> |
  <a href="/metaphors/25250" title="Let Children Get Bored Again [from The New York Times]">full record</a>

  <div class="details_container"></div>
</div>

Мой текущий код здесь:

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen('URLHERE').read()
soup = bs.BeautifulSoup(sauce,'lxml')

body = soup.body
for paragraph in body.find_all('p'):
    print(paragraph.text)

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Если я правильно понимаю ваш вопрос, вы хотите напечатать только кавычки, которые появляются в каждом третьем элементе абзаца, начиная со второго.

quotes = soup.find_all('p')

for i in range(1, len(quotes), 3):
   print(quotes[i].text)

Может быть более чистый способ делает это, но это должно сработать.

0 голосов
/ 10 июля 2020

вы можете использовать xpath для своего запроса, например:

import requests

from lxml import html

page = requests.get('enter_your_url')
tree = html.fromstring(page.content)
data = tree.xpath('//div[@class="result"]//p[2]/text()')

print(data)
...