在开发爬虫的时候,从网页上提取数据是一件非常重要的、琐碎的、容易出错的事情。如果都是通过运行爬虫来测试,这个未免太过麻烦。幸好Scrapy早已针对这个问题提供了专门的Shell命令,熟练使用Shell命令,可以起来事半功倍的效果。其格式如下:
scrapy shell [url|file]
它可以将一个网页(url)或一个本地文件(file)作为分析的来源,例如执行如下命令,加载博客园的首页:
scrapy shell https://www.cnblogs.com
当出现如下输出后,即可进行提取测试:
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x0000023FB1B93A08>
[s] item {}
[s] request <GET https://www.cnblogs.com>
[s] response <200 https://www.cnblogs.com>
[s] settings <scrapy.settings.Settings object at 0x0000023FB1B93988>
[s] spider <DefaultSpider 'default' at 0x23fb1ebed08>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request and update local objects
[s] shelp() Shell help (print this help)
[s] view(response) View response in a browser
In [1]:
这里提供了可用对象和方法,其中进行提取测试最常用的是response对象;如果想查看爬取到的内容,可以使用view(response)方法,这将在默认浏览器中打开爬取回来的网页内容。
提取页面的标题:
In [1]: response.css("title").extract_first()
Out[1]: '<title>博客园 - 开发者的网上家园</title>'
In [2]: response.css("title::text").extract_first()
Out[2]: '博客园 - 开发者的网上家园'
In [3]: response.xpath("//title").extract_first()
Out[3]: '<title>博客园 - 开发者的网上家园</title>'
In [4]: response.xpath("//title/text()").extract_first()
Out[4]: '博客园 - 开发者的网上家园'
可以看到,这里提取的脚本和正常开发是一样的,代码测试通过后,就可以直接复制到爬虫中去。
如果需要确定页面的HTML结构,可以使用View方法查看:
In [5]: view(response)
Out[5]: True
稍等片刻,即会使用默认浏览器打开下载的页面。
更多的使用场景,待以后测试发补充。