scrapy:将html字符串转换为HtmlResponse对象

时间:2014-12-05 19:59:11

标签: python web-scraping scrapy

我有一个原始的html字符串,我想将其转换为scrapy HTML响应对象,以便我可以使用选择器cssxpath,类似于scrapy的response。我该怎么办?

3 个答案:

答案 0 :(得分:28)

首先,如果是出于调试或测试目的,您可以使用Scrapy shell

$ cat index.html
<div id="test">
    Test text
</div>

$ scrapy shell index.html
>>> response.xpath('//div[@id="test"]/text()').extract()[0].strip()
u'Test text'

会话期间有different objects available in the shell,例如responserequest


或者,您可以实例化HtmlResponse class并在body中提供HTML字符串:

>>> from scrapy.http import HtmlResponse
>>> response = HtmlResponse(url="my HTML string", body='<div id="test">Test text</div>', encoding='utf-8')
>>> response.xpath('//div[@id="test"]/text()').extract()[0].strip()
u'Test text'

答案 1 :(得分:1)

alecxe的答案是书面的,但这是从scrapy中的Selector实例化text的正确方法:

>>> from scrapy.selector import Selector
>>> body = '<html><body><span>good</span></body></html>'
>>> Selector(text=body).xpath('//span/text()').get()

'good'

答案 2 :(得分:0)

您可以导入原生scrapy选择器Selector并将html字符串声明为要解析的文本arg。

from scrapy.selector import Selector


def get_list_text_from_html_string(html_string):
    html_item = Selector(text=html_string)
    elements = [_li.get() for _li in html_item.css('ul > li::text')]
    return elements

list_html_string = '<ul class="teams">\n<li>Bayern M.</li>\n<li>Palmeiras</li>\n<li>Liverpool</li>\n<li>Flamengo</li></ul>'
print(get_list_text_from_html_string(list_html_string))
>>> ['Bayern M.', 'Tigres', 'Liverpool', 'Flamengo']