Python BeautifulSoup: объект list_iterator не является подписным - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь извлечь текст из следующей структуры HTML:

<div class="account-age">
    <label></label>
    <div>
        <div>
             <span>Text to extract</span>
        </div>
    </div>
</div>

У меня есть следующий код Beautiful Soup, чтобы сделать это:

from bs4 import BeautifulSoup as bs

soup = bs(html, "lxml")
div = soup.find("div", {"class": "account-age"})
span = div.children[1].children[0].children[0]
text = span.get_text()

К сожалению, BeautifulСуп выдает ошибку: объект list_iterator не может быть подписан.Как я могу это исправить, чтобы извлечь нужный мне текст?

Ответы [ 4 ]

0 голосов
/ 05 июня 2018

Попробуйте:

from bs4 import BeautifulSoup as bs
html ='''<div class="account-age">
    <label></label>
    <div>
        <div>
             <span>Text to extract</span>
        </div>
    </div>
</div>'''
soup = bs(html, 'html.parser')
div = soup.find("div", {"class": "account-age"})
span = div.find('span')
text = span.get_text()
print(text)

Результат:

Text to extract
0 голосов
/ 05 июня 2018

Сначала найдите div, а затем получите доступ к тексту span, используя атрибут следующим образом:

from bs4 import BeautifulSoup as bs

html = """<div class="account-age">
    <label></label>
    <div>
        <div>
             <span>Text to extract</span>
        </div>
    </div>
</div>"""

soup = bs(html, "lxml")
div = soup.find('div', class_='account-age')
print(div.span.text)

Это будет отображать:

Text to extract
0 голосов
/ 05 июня 2018

Свойство children является генератором.Как говорит ошибка, это не по подписке.Чтобы получить список, используйте contents вместо:

div.contents[1].contents[0].contents[0]

См. документацию .

0 голосов
/ 05 июня 2018

Вы можете сделать это, напрямую связав теги из корня div:

div.div.div.span.get_text()
# u'Text to extract'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...