Извлечение только точек маркера после "сильного" названия с веб-сайта с использованием python

63
6

Я хочу извлечь только те пункты, которые указаны в виде патронов под заголовком "ЧТО РЕСПОНДЕНТЫ, ПРЕДСТАВЛЯЮЩИЕ..." на этой странице.

Я могу добиться этого с помощью этого кода:

import requests
URL = 'https://www.instituteforsupplymanagement.org/about/MediaRoom/newsreleasedetail.cfm?ItemNumber=30655&SSO=1'

r = requests.get(URL)
page = r.text
from bs4 import BeautifulSoup
soup = BeautifulSoup(page, 'lxml')

strong_el = soup.find('strong',text='WHAT RESPONDENTS ARE SAYING …')
strong_el.find_all_next('li')[9]

Но проблема здесь в том, что я должен знать, сколько пулевых точек перечислено (в этом случае их 10. Следовательно, они возвращают действительные значения до [9]). Каков наилучший способ извлечь все точки маркера, даже не зная, сколько из них перечислено? Кроме того, мне нужен только текст, а не html.

спросил(а) 2017-03-01T08:29:00+03:00 4 года, 3 месяца назад
1
Решение
63

вы должны сначала найти тег ul, он содержит все теги li

In [3]: ul = strong_el.find_next('ul')

In [4]: for li in ul.find_all('li'):
...: print(li.text)


вне:

"Demand very steady to start the year." (Chemical Products)
"January revenue target slightly lower following a big December shipment month." (Computer & Electronic Products)

ответил(а) 2017-03-01T15:33:00+03:00 4 года, 3 месяца назад
88

Вы можете использовать find_next_sibling чтобы получить элемент ul рядом с strong который содержит эти элементы li. Затем получим все дочерние элементы ul которые являются li элементами:

ul_tag = strong_el.find_next_sibling('ul')
for li_tag in ul_tag.children:
print li_tag.string

ответил(а) 2017-03-01T08:36:00+03:00 4 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема