Iva*_*van 7 scrapy scrapy-spider
我正在请求一个网站,其响应是这样的JSON:
{
"success": true,
"response": "<html>... html goes here ...</html>"
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了废弃HTML或JSON的两种方法,但还没有找到如何在JSON中废弃HTML.是否可以使用scrapy来做到这一点?
一种方法是scrapy.Selector在JSON数据中构建一个HTML.
我假设你有一个Response带有JSON数据的对象,可以通过response.text.
(下面,我正在构建一个测试响应(我正在使用scrapy 1.1和Python 3):
response = scrapy.http.TextResponse(url='http://www.example.com/json', body=r'''
{
"success": true,
"response": "<html>\n <head>\n <base href='http://example.com/' />\n <title>Example website</title>\n </head>\n <body>\n <div id='images'>\n <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>\n <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>\n <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>\n <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>\n <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>\n </div>\n </body>\n</html>"
}
''', encoding='utf8')
Run Code Online (Sandbox Code Playgroud)
)
使用json模块,您可以获得如下HTML数据:
import json
data = json.loads(response.text)
Run Code Online (Sandbox Code Playgroud)
你会得到类似的东西:
>>> data
{'success': True, 'response': "<html>\n <head>\n <base href='http://example.com/' />\n <title>Example website</title>\n </head>\n <body>\n <div id='images'>\n <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>\n <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>\n <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>\n <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>\n <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>\n </div>\n </body>\n</html>"}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样构建一个新的选择器:
selector = scrapy.Selector(text=data['response'], type="html")
Run Code Online (Sandbox Code Playgroud)
之后你可以在上面使用XPath或CSS选择器:
>>> selector.xpath('//title/text()').extract()
['Example website']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |