Как проверить, существует ли элемент в элементе <div>? - PullRequest
0 голосов
/ 23 декабря 2018

html-код выглядит следующим образом:

<div class="AAA">Text of AAA<a href="......AAA/url">Display text of URL A</a></div>
<div class="BBB">Text of BBB<a href="......BBB/url">Display text of URL B</a></div>
<div class="CCC">Text of CCC</div>
<div class="DDD">Text of DDD</div>

Я хочу проанализировать текст для всех div, при этом проверить, существует ли url, если да, то также извлечь его и отобразить в выводе

вывод такой:

Text of AAA
Display text of URL A
......AAA/url
Text of BBB
Display text of URL B
......BBB/url
Text of CCC
Text of DDD

я пытался вложить цикл find_all ('a') в цикл find_all ('div'), но испортил мой вывод

Ответы [ 5 ]

0 голосов
/ 26 декабря 2018

спасибо всем, я разработал решение

for h in ans_kin:
    links = ""
    link = h.find('a')
    if link:
        for l in link:
            links = h.text + link.get('href')
    else:
        links = h.text

    answer_kin.append(links)
0 голосов
/ 24 декабря 2018

Это просто читать, вы также можете использовать это, чтобы получить ожидаемый результат

divs = soup.find_all('div')
for div in divs:
  print(div.contents[0]) # Text of AAA
  link = div.find('a')
  if link:
    print(link.text) # Display text of URL A
    print(link['href']) # ......AAA/url
0 голосов
/ 23 декабря 2018

Вы можете выполнить цикл по divs и затем напечатать элементы soup.contents:

s = """
<div class="AAA">Text of AAA<a href="......AAA/url">Display text of URL A</a> . 
</div>
<div class="BBB">Text of BBB<a href="......BBB/url">Display text of URL B</a> . 
</div>
<div class="CCC">Text of CCC</div>
<div class="DDD">Text of DDD</div>
"""
from bs4 import BeautifulSoup as soup
for _text, *_next in map(lambda x:x.contents, soup(s, 'html.parser').find_all('div')):
  print(_text)
  if _next:
    print(_next[0].text)
    print(_next[0]['href'])

Вывод:

Text of AAA
Display text of URL A
......AAA/url
Text of BBB
Display text of URL B
......BBB/url
Text of CCC
Text of DDD
0 голосов
/ 23 декабря 2018
from bs4 import BeautifulSoup
html="""
<div class="AAA">Text of AAA<a href="......AAA/url">Display text of URL A</a></div>
<div class="BBB">Text of BBB<a href="......BBB/url">Display text of URL B</a></div>
<div class="CCC">Text of CCC</div>
<div class="DDD">Text of DDD</div>
"""
soup = BeautifulSoup(html, "lxml")
for div in soup.findAll('div'):
    print(div.text)
    try:
        print(div.find('a').text)
        print(div.find('a')["href"])
    except AttributeError:
        pass

Выход

Text of AAADisplay text of URL A
Display text of URL A
......AAA/url
Text of BBBDisplay text of URL B
Display text of URL B
......BBB/url
Text of CCC
Text of DDD
0 голосов
/ 23 декабря 2018

Не знаю, как выглядит ваш код, но основная идея примерно такая:

data = soup.findAll('div')
for div in data:
    links = div.findAll('a')
    for a in links:
        print(a['href'])
        print(a.text)

даст вам URL и текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...