Я написал скрипт в python, чтобы вычистить описание из Plot с веб-страницы. Дело в том, что описание находится в нескольких тегах p. Есть и другие p теги, которые я не хочу очищать. Как только мой скрипт завершит разбор описания Plot, он должен остановиться. Однако мой скрипт ниже анализирует все теги p до конца, начиная с раздела Plot.

Как я могу ограничить свой сценарий анализом только описания Plot?

Вот что я написал:

import requests
from bs4 import BeautifulSoup

url = "https://en.wikipedia.org/wiki/Alien_(film)"

with requests.Session() as s:
    s.headers={"User-Agent":"Mozilla/5.0"}
    res = s.get(url)
    soup = BeautifulSoup(res.text,"lxml")
    plot = [item.text for item in soup.select_one("#Plot").find_parent().find_next_siblings("p")]
    print(plot)
1
SIM 17 Сен 2018 в 17:17

2 ответа

Лучший ответ

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

from lxml import html

with requests.Session() as s:
    s.headers={"User-Agent":"Mozilla/5.0"}
    res = s.get(url)
    source = html.fromstring(res.content)
    plot = [item.text_content() for item in source.xpath('//p[preceding::h2[1][span="Plot"]]')]
    print(plot)
1
Andersson 17 Сен 2018 в 14:31

Вы можете выбрать абзацы до следующего заголовка, как

with requests.Session() as s:
    s.headers={"User-Agent":"Mozilla/5.0"}
    res = s.get(url)
    soup = BeautifulSoup(res.text,"lxml")

    plot_start = [item for item in soup.select_one("#Plot").find_parent().find_next_siblings()]
    plot = []
    for item in plot_start:
        if item.name != 'h2':
            plot.append(item.text)
        else:
            break
    print(plot)
1
user308738user308738 17 Сен 2018 в 14:38