返回介绍

4.3 使用 Scrapy 填充数据库

发布于 2024-01-30 22:48:37 字数 3041 浏览 0 评论 0 收藏 0

首先,我们需要一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文