我能够听到人们的尖叫声: Appery.io 是什么, 一个手机应用的专用平台, 它和 Scrapy 有什么关系? 那么, 眼见为实吧你可能还会对几年前在 Excel 电子表格上给某个人 (朋友管理者或者客户) 展示数据时的场景印象深刻不过现如今, 除非你的听众都十分老练, 否则他们的期望很可能会有所不同在接下来的几页里, 你将看到一个简单的手机应用, 这是一个只需几次单击就能够创建出来的最小可视化产品, 其目的是向利益相关者传达抽取所得数据的力量, 并回到生态系统中, 以源网站网络流量的形式展示它能够带来的价值
我将尽量保持简短的启发式示例, 在这里它们将展示如何充分利用你的数据
1.1 选择手机应用框架
借助于适当的工具向手机应用提供数据将是非常容易的事情目前有许多优秀的跨平台手机应用开发框架, 如 PhoneGap 使用 Appcelerator 云服务的 AppceleratorjQuery Mobile 和 Sencha Touch
本文将使用 Appery.io, 因为它可以让我们使用 PhoneGap 和 jQuery Mobile 快速创建 iOSAndroidWindows 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 使用 Appery.io 创建新数据库及集合
为了完成该操作, 需要按照如下步骤执行
1.单击 Databases 选项卡(1)
2.然后单击绿色的 Create new database(2)按钮将新数据库命名为 scrapy(3)
3.现在, 单击 Create 按钮 (4) 此时会自动打开 Scrapy 数据库的仪表盘, 在这里, 你可以创建新的集合
在 Appery.io 的术语中, 一个数据库是由一组集合组成的大致来说, 一个应用使用一个单独的数据库 (至少在最初时是这样), 每个数据库中包含多个集合, 比如用户房产消息等 Appery.io 默认已经提供了一个 Users 集合, 其中包括用户名和密码(它们有很多内置功能) 图 1.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 中所示的那样现在已经准备好从 Scrapy 中导入一些数据了
1.3 使用 Scrapy 填充数据库
首先, 我们需要一个 API key 我们可以在 Settings 选项卡 (1) 中找到它复制该值 (2), 然后单击 Collections 选项卡(3) 回到房产集合中, 过程如图 1.3 所示
图 1.3 使用 Appery.io 创建新数据库及集合
非常好! 现在需要将数据导入到 Appery.io 中我们先将项目以及名为 easy 的爬虫 (easy.py) 复制过来, 并将该爬虫重命名为 tomobile(tomobile.py)同时, 编辑文件, 将其名称设为 tomobile
你可能已经注意到的一个问题是, 这里并没有使用之前文节中用过的 web 服务器(http://web:9312), 而是使用了该站点的一个公开可用的副本, 这是我存放在 http://scrapybook.s3.amazonaws.com 上的副本之所以在本文中使用这种方式, 是因为这样可以使图片和 URL 都能够公开可用, 此时就可以非常轻松地分享应用了
我们将使用 Appery.io 的管道来插入数据 Scrapy 管道通常是一个很小的 Python 类, 拥有后置处理清理及存储 Scrapy Item 的功能就目前来说, 你可以使用 easy_install 或 pip 安装它, 不过如果你使用的是我们的 Vagrant dev 机器, 则无需进行任何操作, 因为我们已经将其安装好了
或
此时, 你需要对 Scrapy 的主设置文件进行一些小修改, 将之前复制的 API key 添加进来现在, 我们所需要做的就是将如下行添加到 properties/settings.py 文件中
不要忘记将 APPERYIO_DB_ID 替换为你的 API key 此外, 还需要确保设置中的用户名和密码, 要和你在 Appery.io 中创建数据库用户时使用的相同要想向 Appery.io 的数据库中填充数据, 请像平常那样启动 scrapy crawl
这次的输出会有些不同可以看到在最开始的几行中, 有一行是用于启用 ApperyIoPipeline 这个 Item 管道的; 不过最明显的是, 你会发现尽管抓取了 100 个 Item, 但是却有 200 次请求 / 响应这是因为 Appery.io 的管道对每个 Item 都执行了一个到 Appery.io 服务端的额外请求, 以便写入每一个 Item 这些带有 api.appery.io 这个 URL 的请求同样也会在日志中出现
当回到 Appery.io 时, 可以看到在 properties 集合 (1) 中已经填充好了数据(2), 如图 1.4 所示
图 1.4 使用数据填充 properties 集合
1.4 创建手机应用
创建一个新的手机应用非常简单我们只需单击 Apps 选项卡 (1), 然后单击绿色的 Create new app 按钮(2) 填写应用名称为 properties(3), 然后单击 Create 按钮进行创建就可以了, 该过程如图 1.5 所示
图 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 所示
图 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 所示
图 1.7 将数据映射到用户界面
选择 Service(2)作为数据源类型由于前面创建的服务是唯一可用的服务, 因此它会被自动选取然后可以继续单击 Add 按钮(3), 此时服务属性将会在其下方列出只要按下了 Add 按钮, 就会看到像 Before send 以及 Success 这样的事件我们可以通过单击 Success 后面的 Mapping 按钮, 定制服务成功调用后要做的事情
此时会打开 Mapping action editor, 我们可以在这里完成连线该编辑器有两侧左侧是服务响应中可用的字段, 而在右侧中可以看到前面步骤中添加的 UI 控件的属性两侧都有一个 Expand all 链接, 单击该链接可以看到所有可用的数据和控件接下来, 需要按照表 1.2 中给出的 5 个映射, 从左侧向右侧拖曳
表 1.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 所示
图 1.8 运行在你浏览器中的手机应用
手机应用将会在浏览器中运行这些链接都是有效的(2), 可以浏览可以预览不同的手机屏幕方案以及设备方向, 也可以单击 View on Phone 按钮, 此时会显示一个二维码, 你可以使用移动设备扫描该二维码, 并预览该应用你只需分享其生成的链接, 其他人也可以在他们的浏览器中尝试该应用
只需单击几下, 我们就可以将 Scrapy 抓取的数据组织起来, 并展示在手机应用中如果你需要更进一步地定制该应用, 可以参考 Appery.io 提供的教程, 其网址为 http://devcenter.appery.io/tutorials/
当一切准备就绪时, 就可以通过 EXPORT 按钮导出该应用了, Appery.io 提供了非常丰富的导出选项, 如图 1.9 所示
图 1.9 你可以将应用导出到大部分主流移动平台
你可以导出项目文件, 在自己喜欢的 IDE 中进一步开发; 也可以获得二进制文件, 发布到各个平台的手机市场当中
1.5 本文小结
使用 Scrapy 和 Appery.io 这两个工具, 我们拥有了一个可以抓取网站并且能够将数据插入到数据库中的系统此外, 我们还得到了 RESTful API, 以及一个简单的可以用于 Android 和 iOS 的手机应用对于高级特性和进一步开发, 你可以更加深入到这些平台中, 将其中部分开发工作外包给领域专家, 或是研究替代方案现在, 你只需要最少的编码, 就能够拥有一个可以演示应用理念的最小产品
你会注意到, 在如此短的开发时间中, 我们的应用看起来还不错这是因为它使用了真实的数据, 而不是占位符, 并且所有链接都是可用且有意义的我们成功创建了一个尊重其生态 (源网站) 的最小可用产品, 并以流量的形式将价值回馈给源网站
现在, 我们可以开始学习如何使用 Scrapy 爬虫在更加复杂的场景下抽取数据了
本文摘自精通 Python 爬虫框架 Scrapy
精通 Python 爬虫框架 Scrapy
美迪米特里奥斯 考奇斯 - 劳卡斯 (Dimitrios Kouzis-Loukas) 箸
点击封面购买纸书 https://item.jd.com/12292223.html
Python3 scrapy 教程, 全面剖析网络爬虫技术的实现原理, 通过爬取示例演示 Scrapy 的应用, 涵盖从桌面端爬取到移动端爬取, 实时爬取在内的所有内容
本书讲解了 Scrapy 的基础知识, 讨论了如何从任意源提取数据, 如何清理数据, 以及如何使用 Python 和第三方 API 进行处理, 以满足自身需求本书还讲解了如何将爬取的数据高效地馈入数据库搜索引擎和流数据处理系统 (比如 Apache Spark) 在学习完本书后, 你将对数据爬取胸有成竹, 并将数据应用在自己的应用程序中
在异步社区后台回复关注, 即可免费获得 2000 门在线视频课程; 推荐朋友关注根据提示获取赠书链接, 免费得异步图书一本赶紧来参加哦!
扫一扫上方二维码, 回复关注参与活动!
阅读原文, 购买精通 Python 爬虫框架 Scrapy
来源: http://click.aliyun.com/m/43120/