lxml.html не находит тег тела - PullRequest
0 голосов
/ 24 мая 2019

Я использую lxml.html для разбора различных html-страниц. Теперь я понял, что, по крайней мере, для некоторых страниц он не находит тег body, несмотря на то, что он присутствует, и красивый суп находит его (даже если он использует lxml в качестве парсера).

пример страницы: https://plus.google.com/ (что от нее осталось)

import lxml.html
import bs4

html_string = """
    ... source code of https://plus.google.com/ (manually copied) ...
"""

# lxml fails (body is None)
body = lxml.html.fromstring(html_string).find('body')

# Beautiful soup using lxml parser succeeds
body = bs4.BeautifulSoup(html_string, 'lxml').find('body')

Любые предположения о том, что здесь происходит, приветствуются:)

Обновление:

Проблема, похоже, связана с кодировкой.

# working version
body = lxml.html.document_fromstring(html_string.encode('unicode-escape')).find('body')

1 Ответ

1 голос
/ 24 мая 2019

Вы можете использовать что-то вроде этого:

import requests
import lxml.html

html_string = requests.get("https://plus.google.com/").content
body = lxml.html.document_fromstring(html_string).find('body')

переменная body содержит html-элемент body

...