Как извлечь html элементов абзаца, только если они содержат жирный шрифт - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь извлечь элементы абзаца со страницы Википедии под идентификатором = 'See', все в список.

Использование:

import bs4
import requests


response = requests.get("https://wikitravel.org/en/Bhopal")

if response is not None:
    html = bs4.BeautifulSoup(response.text, 'html.parser')

plot = []

# find the node with id of "Plot"
mark = html.find(id="See")

# walk through the siblings of the parent (H2) node 
# until we reach the next H2 node
for elt in mark.parent.nextSiblingGenerator():
    if elt.name == "h2":
        break
    if hasattr(elt, "text"):
        plot.append(elt.text)

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

1 Ответ

0 голосов
/ 29 января 2020

Это то, что вы ищете? Я добавил несколько строк в ваш код. Я использовал l xml парсер. (html тоже хорошо).

from bs4 import BeautifulSoup as bs 
import lxml
import ssl
import requests
ssl._create_default_https_context = ssl._create_unverified_context

url = 'https://wikitravel.org/en/Bhopal'
content = requests.get('https://wikitravel.org/en/Bhopal').text
soup = bs(content, 'lxml')

plot =[]
mark = soup.find(id="See")

# # # walk through the siblings of the parent (H2) node 
# # # until we reach the next H2 node
for elt in mark.parent.next_siblings:
    if elt.name == "h2":
        break
    if hasattr(elt, "text") and (elt.find('b')):
        plot.append(elt.text)
print(*plot,sep=('\n')) #Just to print the list in a readable way

Первые несколько строк вывода на моем ноутбуке Jupyter:

enter image description here

...