Как найти HTML-тег без идентификатора или имени класса, используя BeautifulSoup? - PullRequest
1 голос
/ 08 октября 2019

Я могу получить доступ к содержимому тега html, когда с ним связан идентификатор, но не могу найти теги html без идентификаторов.

Я могу получить доступ к нужному мне содержимому, когда существует идентификатор:

<div id="anything"> 
  <div class="anything">
  What I need
  </div>
</div>

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

<div id="anything">
  <div>
    <div class="something">
      What I need 
    </div>
  </div>
</div>

Я не могу его найтииспользуя .findAll, .find_next_sibling или .children я попытался найти его следующим образом:

x = soup.find('div', attrs ={'id':'anything'}) 
type(x.div) 
print(x.div.text)

Но тип (x.div) возвращает NoneType .... ???

for foo in soup.find_all('div', attrs={'id': 'anything'}):
    bar = foo.find('div', attrs={'class': 'anything'})
    print(bar.contents[0].text)

Это печатает «Что мне нужно» в первом блоке html, но не во втором

Это работает с тегами с идентификатором, но я не могу найти способ заставить его работать, чтобы найти div без идентификатора

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Мне интересно, если я что-то здесь упускаю. Вы можете использовать select и отношения между parent с id и child с классом

from bs4 import BeautifulSoup as bs

html = '''<div id="anything">
  <div>
    <div class="something">
      What I need 
    </div>
  </div>
</div>'''

soup = bs(html, 'lxml')
print(soup.select_one('#anything .something').text.strip())
0 голосов
/ 08 октября 2019

вы можете перемещаться по цепочке div следующим образом:

print(soup.div.div.text)

вывод:

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