Использование XPath для извлечения элементов внутри тега <script> - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь использовать XPath для получения элементов на странице, которые находятся внутри тега <script>. Например:

<div id="foo">
    <script>
        <p>You can't get me.</p>
    </script>
</div>

Если я попытаюсь response.xpath('//div[@id="foo"]//p') или response.xpath('//div[@id="foo"]/script/p'), оба вернут пустой массив.

Как получить элементы в теге <script> с помощью XPath?

1 Ответ

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

eLRuLL обеспечил еще более элегантный и лучший ответ на мой вопрос. Его решения следующие:

from scrapy import Selector

#First, retrieve the content within the <script> tag:
text = response.xpath('//script/text()').extract_first()
#Then, create a Selector
sel = Selector(text=text)
#Now we can use XPath normally as if the text was a common HTML response
sel.xpath(//p/text()).extract_first()

Старый ответ: Узел <script> имеет только дочерние текстовые типы. Вот почему XPath не углубляется в тег <script>. Но я нашел способ обойти это.

#First, retrieve the content within the <script> tag:
text = response.xpath('//script/text()').extract_first()
#Then, encode it
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...