Как составить список всех дочерних элементов тега, который делит свое имя с другим братом в Beautifulsoup? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь получить список дочерних тегов определенного тега. Тег является div. Однако у него есть еще один брат по имени div, который занимает второе место в списке своих братьев и сестер.

enter code here
     print(len(soup.body.div.main.div.section))
     8

     for i in range(8):
          print(soup.body.div.main.div.section.contents[i].name)

      None
      a
      div
      None
      script
      None
      input
      div

print(soup.body.div.main.div.section.contents[7].name)
div
print(soup.body.div.main.div.section.div)
<div class="front-end-breadcrumb"></div>

print(len(soup.body.div.main.div.section.div))
0
print(len(soup.body.div.main.div.section.contents[2]))
0
print(len(soup.body.div.main.div.section.contents[7]))
2
print(soup.body.div.main.div.section[7])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/bs4/element.py", line 1016, in __getitem__
return self.attrs[key]
 KeyError: 7

Я хочу получить длину второго тега div. С помощью ... содержимого [7] я смог найти длину. Однако я не всегда могу знать, где находится второй тег div в списке дочерних элементов раздела.

Я бы хотел получить список всех дочерних тегов второго тега div в приведенном выше коде.

Также, если у второго div есть дочерний main, тогда я хочу иметь возможность вызывать contents.div [2] .main. Однако это не работает из-за ключевой ошибки. Какой обходной путь для этого.

Это веб-страница, над которой я работаю:

https://www.indiatoday.in/magazine/cover-story/story/20071231-a-lost-cause-734888-2007-12-21

Существует много html-контента, поэтому я не думаю, что смогу опубликовать все.

1 Ответ

0 голосов
/ 11 января 2019

Вы используете «нестандартный» способ выбора элемента, если дерево DOM изменилось, оно не удастся. Используйте find(), findAll(), select(), select_one() или прочитайте документы здесь .

contents.div[2].main недопустимо, поскольку contents - это список , а не дерево DOM.

Вы хотите выбрать <div class="story-section"> и все div внутри него?

# select first element
story_section = soup.find('div', class_='story-section')
# or
story_section= soup.select_one('div.story-section')
print(story_section)

# get all "div" inside ".story-section"
div_in_aricle = story_section.findAll('div')
for div in story_section:
    print(div)

#To get article body
article = soup.select_one('div.description')
# or
article = soup.find('div', class_='description')
print(article.text)
# 60 REVOLUTIONS — KHALISTAN(from left) Kanwar Pal, Zaffarwal,.....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...