Очистка данных с использованием Python и BS4 - PullRequest
0 голосов
/ 29 мая 2018
<a href="/news/2018/05/israeli-army-projectiles-fired-israel-gaza-180529051139606.html">
    <h2 class="top-sec-title">
        Israel launches counterattacks in Gaza amid soaring tensions
    </h2>
</a>

Я хочу использовать класс h2, который называется "top-sec-title", и очистить текст на h2 с помощью href of a.Ниже приведен пример того, что я имел в виду ниже. Html имеет класс a, который помог мне получить href и текст в его дочернем элементе, который в нижнем регистре равен h3:

<a class="gs-c-promo-heading gs-o-faux-block-link__overlay-link gel-pica-bold nw-o-link-split__anchor" href="/news/world-us-canada-44294366">
    <h3 class="gs-c-promo-heading__title gel-pica-bold nw-o-link-split__text">
        Hurricane Maria 'killed 4,600 in Puerto Rico'
    </h3>
</a>

Код ниже - это то, что я использовал для извлечения данных из источника HTML выше.

news = soup.find_all('a', attrs={'class':'gs-c-promo-heading gs-o-faux-block- 
link__overlay-link gel-pica-bold nw-o-link-split__anchor'})

for item in news:
    print(item.get(href))
    print(item.text)

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Код:

html = '''
<a href="/news/2018/05/israeli-army-projectiles-fired-israel-gaza-180529051139606.html">
    <h2 class="top-sec-title">
        Israel launches counterattacks in Gaza amid soaring tensions
    </h2>
</a>
'''
soup = BeautifulSoup(html, 'lxml')

a_tags = [h.parent for h in soup.select('.top-sec-title')]

for a in a_tags:
    print(a['href'])
    print(a.get_text(strip=True))

Выход:

/news/2018/05/israeli-army-projectiles-fired-israel-gaza-180529051139606.html
Israel launches counterattacks in Gaza amid soaring tensions
0 голосов
/ 30 мая 2018

Это даст вам все элементы, которые включают h2 элементы, что позволит вам получить href, если включающий элемент - a.

lst_of_h2 = soup.find_all('h2', {'class': 'top-sec-title'})
for h2 in lst_of_h2:
    h2.parent # enclosing element
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...