不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

使用Scrapy Shell命令测试提取数据

在开发爬虫的时候,从网页上提取数据是一件非常重要的、琐碎的、容易出错的事情。如果都是通过运行爬虫来测试,这个未免太过麻烦。幸好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

稍等片刻,即会使用默认浏览器打开下载的页面。

更多的使用场景,待以后测试发补充。 

不允许评论
粤ICP备17049187号-1