精通Python爬虫从Scrapy到移动应用(文末福利)

  1. 云栖社区>
  2. 博客>
  3. 正文

精通Python爬虫从Scrapy到移动应用(文末福利)

异步社区 2018-03-03 10:36:56 浏览16466
展开阅读全文

我能够听到人们的尖叫声:“Appery.io是什么,一个手机应用的专用平台,它和Scrapy有什么关系?”那么,眼见为实吧。你可能还会对几年前在Excel电子表格上给某个人(朋友、管理者或者客户)展示数据时的场景印象深刻。不过现如今,除非你的听众都十分老练,否则他们的期望很可能会有所不同。在接下来的几页里,你将看到一个简单的手机应用,这是一个只需几次单击就能够创建出来的最小可视化产品,其目的是向利益相关者传达抽取所得数据的力量,并回到生态系统中,以源网站网络流量的形式展示它能够带来的价值。

我将尽量保持简短的启发式示例,在这里它们将展示如何充分利用你的数据。

1.1 选择手机应用框架

借助于适当的工具向手机应用提供数据将是非常容易的事情。目前有许多优秀的跨平台手机应用开发框架,如PhoneGap、使用Appcelerator云服务的Appcelerator、jQuery Mobile和Sencha Touch。

本文将使用Appery.io,因为它可以让我们使用PhoneGap和jQuery Mobile快速创建iOS、Android、Windows Phone以及HTML5手机应用。我和Scrapy都与Appery.io无任何利益关联。我会鼓励你独立进行调研,看看除了本文中提出的功能外,它是否也能符合你的需求。请注意这是一个付费服务,你可以有14天的试用期,不过在我看来,它可以让人无需动脑就能快速开发出原型,尤其是对于那些不是网络专家的人来说,为此付费是值得的。我选择该服务的主要原因是它既能提供手机应用,也能提供后端服务,也就是说我们不需要再去配置数据库、编写REST API或为服务端及手机应用使用其他一些语言。你将看到,我们一行代码都不用去编写!我们将会使用它们的在线工具;在任何时候,你都可以下载该应用,并作为PhoneGap项目,使用PhoneGap的所有功能。

在本文中,你需要接入互联网连接,以便使用Appery.io。同时,还需要注意的是该网站的布局可能在未来会有所变化。请将我们的截屏作为参考,而不要在发现该网站外观不同时感到惊讶。

1.2 创建数据库和集合

第一步是通过单击Appery.io网站上的Sign-Up按钮并选取免费方案,来注册免费的Appery.io方案。你需要提供用户名、邮箱地址以及密码,然后就会创建好新账户了。等待几秒钟后,账户完成激活。然后就可以登录到Appery.io的仪表盘了。现在,开始准备创建新的数据库以及集合,如图1.1所示。

1
图1.1 使用Appery.io创建新数据库及集合

为了完成该操作,需要按照如下步骤执行。

1.单击Databases选项卡(1)。

2.然后单击绿色的Create new database(2)按钮。将新数据库命名为scrapy(3)。

3.现在,单击Create按钮(4)。此时会自动打开Scrapy数据库的仪表盘,在这里,你可以创建新的集合。

在Appery.io的术语中,一个数据库是由一组集合组成的。大致来说,一个应用使用一个单独的数据库(至少在最初时是这样),每个数据库中包含多个集合,比如用户、房产、消息等。Appery.io默认已经提供了一个Users集合,其中包括用户名和密码(它们有很多内置功能)。图1.2所示为创建集合的过程。

2
图1.2 使用Appery.io创建新数据库及集合

现在,我们添加一个用户,用户名为root,密码为pass。当然,你也可以选择更加安全的用户名和密码。为实现该目的,请单击侧边栏的Users集合(1),然后单击+Row添加用户/行(2)。在出现的两个字段中填入用户名和密码(3)和(4)。

我们还需要创建一个新的集合,用于存储Scrapy抓取到的房产数据,并将该集合命名为properties。通过单击绿色的Create new collection按钮(5),将其命名为properties(6),然后单击Add按钮(7),就可以创建新的集合了。现在,我们还必须对该集合进行一些定制化处理。单击+Col添加数据库列(8)。每个数据库列都有其类型,用于对值进行校验。除了价格是数值类型外,大部分字段都是简单的字符串类型。我们将通过单击+Col添加几个列(8),并填充列名(9),如果不是字符串类型的话,还需要选择类型(10),然后单击Create column按钮(11)。重复该过程5次,创建表1.1中展示的列。

表1.1
_1
在集合创建的最后,你应该已经将所需的所有列都创建完成了,就像表1.1中所示的那样。现在已经准备好从Scrapy中导入一些数据了。

1.3 使用Scrapy填充数据库

首先,我们需要一个API key。我们可以在Settings选项卡(1)中找到它。复制该值(2),然后单击Collections选项卡(3)回到房产集合中,过程如图1.3所示。
3
图1.3 使用Appery.io创建新数据库及集合

非常好!现在需要将数据导入到Appery.io中。我们先将项目以及名为easy的爬虫(easy.py)复制过来,并将该爬虫重命名为tomobile(tomobile.py)。同时,编辑文件,将其名称设为tomobile。
4
你可能已经注意到的一个问题是,这里并没有使用之前文节中用过的Web服务器(http://web:9312),而是使用了该站点的一个公开可用的副本,这是我存放在http://scrapybook.s3.amazonaws.com上的副本。之所以在本文中使用这种方式,是因为这样可以使图片和URL都能够公开可用,此时就可以非常轻松地分享应用了。

我们将使用Appery.io的管道来插入数据。Scrapy管道通常是一个很小的Python类,拥有后置处理、清理及存储Scrapy Item的功能。就目前来说,你可以使用easy_install或pip安装它,不过如果你使用的是我们的Vagrant dev机器,则无需进行任何操作,因为我们已经将其安装好了。
5
6
此时,你需要对Scrapy的主设置文件进行一些小修改,将之前复制的API key添加进来。现在,我们所需要做的就是将如下行添加到properties/settings.py文件中。

7
不要忘记将APPERYIO_DB_ID替换为你的API key。此外,还需要确保设置中的用户名和密码,要和你在Appery.io中创建数据库用户时使用的相同。要想向Appery.io的数据库中填充数据,请像平常那样启动scrapy crawl。

8
这次的输出会有些不同。可以看到在最开始的几行中,有一行是用于启用ApperyIoPipeline这个Item管道的;不过最明显的是,你会发现尽管抓取了100个Item,但是却有200次请求/响应。这是因为Appery.io的管道对每个Item都执行了一个到Appery.io服务端的额外请求,以便写入每一个Item。这些带有api.appery.io这个URL的请求同样也会在日志中出现。

当回到Appery.io时,可以看到在properties集合(1)中已经填充好了数据(2),如图1.4所示。9
图1.4 使用数据填充properties集合

1.4 创建手机应用

创建一个新的手机应用非常简单。我们只需单击Apps选项卡(1),然后单击绿色的Create new app按钮(2)。填写应用名称为properties(3),然后单击Create按钮进行创建就可以了,该过程如图1.5所示。
10
图1.5 创建新手机应用及数据库集合

1.4.1 创建数据库访问服务

创建新应用时的选项数量可能会有些多。使用Appery.io的应用编辑器,可以写出复杂的应用,不过我们将尽可能保持事情简单。我们最初需要的就是创建一个服务,能够让我们从应用中访问Scrapy数据库。为了达到这一目的,需要单击长方形的绿色按钮CREATE NEW(5),然后选择Database Services(6)。这时会弹出一个新的对话框,让我们选择想要连接的数据库。选择scrapy数据库(7)。这个菜单中的大部分选项都不会用到,现在只需要单击展开properties区域(8),然后选择List(9)。在后台,它会为我们编写代码,使得我们使用Scrapy爬取的数据可以在网络上使用。最后,单击Import selected services按钮完成(10)。

1.4.2 创建用户界面

下面将要开始创建应用所有的可视化元素了,这将会使用编辑器中的DESIGN选项卡来实现,如图1.6所示。
11
图1.6 创建用户界面

从页面左侧的树中,展开Pages文件夹(1),然后单击startScreen(2)。UI编辑器将会打开该页面,我们可以在其中添加一些控件。下面使用编辑器编辑标题,以便对其更加熟悉。单击头部标题(3),然后会发现屏幕右侧的属性区域会变为显示标题的属性,其中包含一个Text属性,将该属性值修改为Scrapy App,屏幕中间的标题也会相应地更新。

然后,需要添加一个网格组件,从左侧面板(5)中拖曳Grid控件即可实现。该控件有两行,而根据我们的需求,只需要一行即可。选择刚刚添加的网格。当手机视图顶部的缩略图区域(6)变灰时,就可以知道该网格已经被选取了。如果没有被选取,单击该网格以便选中。然后右侧的属性栏会更新为网格的属性。这里只需要将Rows属性设置为1,然后单击Apply即可(7)和(8)。现在,该网格就会被更新为只有一行了。

最后,拖拽另外一些控件到网格中。首先要在网格左侧添加图片控件(9),然后在网格右侧添加链接(10),最后在链接下面添加标签(11)。

就布局而言,此时已经足够。接下来将从数据库中向用户界面输入数据。

1.4.3 将数据映射到用户界面

目前为止,我们花费了大量时间在DESIGN选项卡中,以创建应用的可视化效果。为了将可用的数据链接到这些控件中,需要切换到DATA选项卡(1),如图1.7所示。
12
图1.7 将数据映射到用户界面

选择Service(2)作为数据源类型。由于前面创建的服务是唯一可用的服务,因此它会被自动选取。然后可以继续单击Add按钮(3),此时服务属性将会在其下方列出。只要按下了Add按钮,就会看到像Before send以及Success这样的事件。我们可以通过单击Success后面的Mapping按钮,定制服务成功调用后要做的事情。

此时会打开Mapping action editor,我们可以在这里完成连线。该编辑器有两侧。左侧是服务响应中可用的字段,而在右侧中可以看到前面步骤中添加的UI控件的属性。两侧都有一个Expand all链接,单击该链接可以看到所有可用的数据和控件。接下来,需要按照表1.2中给出的5个映射,从左侧向右侧拖曳。

表1.2
_2
1.4.4 数据库字段与用户界面控件间映射

表1.2中项的数量可能会与你的情况有些许差别,不过由于每种控件都只有一个,因此出错的可能性非常小。通过设置这些映射,我们通知Appery.io在后台编写所有代码,以便在数据库查询成功时使用数据库中的值加载控件。下面,可以单击Save and return按钮(6)继续。

此时又回到了DATA选项卡,如图1.7所示。由于还需要返回到UI编辑器当中,因此需要单击DESIGN选项卡(7)。在屏幕下方,你会发现一个EVENTS区域(8),尽管该区域一直存在,但它刚刚才被展开。在EVENTS区域中,我们让Appery.io做一些事情,作为对UI事件的响应。这是我们需要执行的最后一个步骤。它会让应用在UI加载完成后立即调用服务取回数据。为了实现该功能,我们需要选择startScreen作为组件,并将事件保持为默认的Load选项。然后选择Invoke service作为action,保持Datasource为默认的restservice1选项(9)。最后,单击Save(10),这就是我们为创建这个手机应用所做的所有事情了。

1.4.5 测试、分享及导出你的手机应用

现在,可以测试这个应用了。我们所需要做的事情就是单击UI生成器顶部的TEST按钮(1),如图1.8所示。
13
图1.8 运行在你浏览器中的手机应用

手机应用将会在浏览器中运行。这些链接都是有效的(2),可以浏览。可以预览不同的手机屏幕方案以及设备方向,也可以单击View on Phone按钮,此时会显示一个二维码,你可以使用移动设备扫描该二维码,并预览该应用。你只需分享其生成的链接,其他人也可以在他们的浏览器中尝试该应用。

只需单击几下,我们就可以将Scrapy抓取的数据组织起来,并展示在手机应用中。如果你需要更进一步地定制该应用,可以参考Appery.io提供的教程,其网址为http://devcenter.appery.io/tutorials/
当一切准备就绪时,就可以通过EXPORT按钮导出该应用了,Appery.io提供了非常丰富的导出选项,如图1.9所示。
14
图1.9 你可以将应用导出到大部分主流移动平台

你可以导出项目文件,在自己喜欢的IDE中进一步开发;也可以获得二进制文件,发布到各个平台的手机市场当中。

1.5 本文小结

使用Scrapy和Appery.io这两个工具,我们拥有了一个可以抓取网站并且能够将数据插入到数据库中的系统。此外,我们还得到了RESTful API,以及一个简单的可以用于Android和iOS的手机应用。对于高级特性和进一步开发,你可以更加深入到这些平台中,将其中部分开发工作外包给领域专家,或是研究替代方案。现在,你只需要最少的编码,就能够拥有一个可以演示应用理念的最小产品。

你会注意到,在如此短的开发时间中,我们的应用看起来还不错。这是因为它使用了真实的数据,而不是占位符,并且所有链接都是可用且有意义的。我们成功创建了一个尊重其生态(源网站)的最小可用产品,并以流量的形式将价值回馈给源网站。

现在,我们可以开始学习如何使用Scrapy爬虫在更加复杂的场景下抽取数据了。

本文摘自《精通Python爬虫框架Scrapy》
15
《精通Python爬虫框架Scrapy》
【美】迪米特里奥斯 考奇斯-劳卡斯(Dimitrios Kouzis-Loukas)箸

点击封面购买纸书https://item.jd.com/12292223.html

Python3 scrapy教程,全面剖析网络爬虫技术的实现原理,通过爬取示例演示Scrapy的应用,涵盖从桌面端爬取到移动端爬取,实时爬取在内的所有内容。

本书讲解了Scrapy的基础知识,讨论了如何从任意源提取数据,如何清理数据,以及如何使用Python和第三方API进行处理,以满足自身需求。本书还讲解了如何将爬取的数据高效地馈入数据库、搜索引擎和流数据处理系统(比如Apache Spark)。在学习完本书后,你将对数据爬取胸有成竹,并将数据应用在自己的应用程序中。

16
17
在“异步社区”后台回复“关注”,即可免费获得2000门在线视频课程;推荐朋友关注根据提示获取赠书链接,免费得异步图书一本。赶紧来参加哦!
扫一扫上方二维码,回复“关注”参与活动!
阅读原文,购买《精通Python爬虫框架Scrapy》

网友评论

登录后评论
0/500
评论
异步社区
+ 关注