4.3 使用 Scrapy 填充数据库
首先,我们需要一个API key。我们可以在Settings选项卡(1)中找到它。复制该值(2),然后单击Collections选项卡(3)回到房产集合中,过程如图4.3所示。
图4.3 使用Appery.io创建新数据库及集合
非常好!现在需要修改在第3章中创建的应用,将数据导入到Appery.io中。我们先将项目以及名为easy的爬虫(easy.py)复制过来,并将该爬虫重命名为tomobile(tomobile.py)。同时,编辑文件,将其名称设为tomobile。
$ ls properties scrapy.cfg $ cat properties/spiders/tomobile.py ... class ToMobileSpider(CrawlSpider): name = 'tomobile' allowed_domains = ["scrapybook.s3.amazonaws.com"] # Start on the first index page start_urls = ( 'http://scrapybook.s3.amazonaws.com/properties/' 'index_00000.html', ) ...
本章代码可以在GitHub的ch04目录下找到。
你可能已经注意到的一个问题是,这里并没有使用之前章节中用过的Web服务器(http://web:9312),而是使用了该站点的一个公开可用的副本,这是我存放在http://scrapybook.s3.amazonaws.com上的副本。之所以在本章中使用这种方式,是因为这样可以使图片和URL都能够公开可用,此时就可以非常轻松地分享应用了。
我们将使用Appery.io的管道来插入数据。Scrapy管道通常是一个很小的Python类,拥有后置处理、清理及存储Scrapy Item的功能。第8章将会更深入地介绍这部分的内容。就目前来说,你可以使用easy_install或pip安装它,不过如果你使用的是我们的Vagrant dev机器,则无需进行任何操作,因为我们已经将其安装好了。
$ sudo easy_install -U scrapyapperyio
或
$ sudo pip install --upgrade scrapyapperyio
此时,你需要对Scrapy的主设置文件进行一些小修改,将之前复制的API key添加进来。第7章将会更加深入地讨论设置。现在,我们所需要做的就是将如下行添加到properties/settings.py文件中。
ITEM_PIPELINES = {'scrapyapperyio.ApperyIoPipeline': 300} APPERYIO_DB_ID = '<<Your API KEY here>>' APPERYIO_USERNAME = 'root' APPERYIO_PASSWORD = 'pass' APPERYIO_COLLECTION_NAME = 'properties'
不要忘记将APPERYIO_DB_ID替换为你的API key。此外,还需要确保设置中的用户名和密码,要和你在Appery.io中创建数据库用户时使用的相同。要想向Appery.io的数据库中填充数据,请像平常那样启动scrapy crawl。
$ scrapy crawl tomobile -s CLOSESPIDER_ITEMCOUNT=90 INFO: Scrapy 1.0.3 started (bot: properties) ... INFO: Enabled item pipelines: ApperyIoPipeline INFO: Spider opened ... DEBUG: Crawled (200) <GET https://api.appery.io/rest/1/db/login?username= root&password=pass> ... DEBUG: Crawled (200) <POST https://api.appery.io/rest/1/db/collections/ properties> ... INFO: Dumping Scrapy stats: {'downloader/response_count': 215, 'item_scraped_count': 105, ...} INFO: Spider closed (closespider_itemcount)
这次的输出会有些不同。可以看到在最开始的几行中,有一行是用于启用ApperyIoPipeline这个Item管道的;不过最明显的是,你会发现尽管抓取了100个Item,但是却有200次请求/响应。这是因为Appery.io的管道对每个Item都执行了一个到Appery.io服务端的额外请求,以便写入每一个Item。这些带有api.appery.io这个URL的请求同样也会在日志中出现。
当回到Appery.io时,可以看到在properties集合(1)中已经填充好了数据(2),如图4.4所示。
图4.4 使用数据填充properties集合
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论