Scrapy - как преобразовать строку в объект, на котором я могу использовать XPath? - PullRequest
0 голосов
/ 06 ноября 2018

Допустим, у меня есть какой-то простой текст в HTML-подобном формате, например:

<div id="foo"><p id="bar">Some random text</p></div>

И мне нужно иметь возможность запустить XPath на нем, чтобы получить какой-то внутренний элемент. Как я могу преобразовать обычный текст в какой-то объект, на котором я мог бы использовать XPath?

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Вы можете просто использовать обычный селектор для запуска тех же xpath, css запросов напрямую:

from scrapy import Selector

...

sel = Selector(text="<div id="foo"><p id="bar">Some random text</p></div>")
selected_xpath = sel.xpath('//div[@id="foo"]')
0 голосов
/ 07 ноября 2018

Андерссон уже опубликовал решение моего вопроса. Это вторая, которую я только что обнаружил, которая также работает и использует классы Scrapy, что позволяет использовать все методы, уже знакомые пользователю Scrapy (например, extract (), extract_first () и т. Д.).

text = """<div id="foo"><p id="bar">Some random text</p></div>"""
#First, we need to encode the text
text_encoded = text.encode('utf-8')
#Now, convert it to a HtmlResponse object
text_in_html = HtmlResponse(url='some url', body=text_encoded, encoding='utf-8')
#Now we can use XPath normally as if the text was a common HTML response
text_in_html.xpath(//p/text()).extract_first()
0 голосов
/ 06 ноября 2018

Вы можете передать образец HTML-кода в виде строки в lxml.html и проанализировать его с помощью XPath:

from lxml import html

code = """<div id="foo"><p id="bar">Some random text</p></div>"""
source = html.fromstring(code)
source.xpath('//div/p/text()')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...