[可视化抓取]portia2.0尝鲜体验以及自动化畅想-数据输出以及原理分析

目录

  • 环境准备
  • 启动事项
  • 使用指南
  • 代码分析
  • 总结分享

环境准备

  • mac os (或者ubuntu 14.04 , 16.04 也可以)
  • docker (搜索安装)
  • docker-compose (pip安装)
  • docker加速 ==> 点击导航 <==

有人会问了,这次怎么多了一个镜像加速啦?因为国内的某些不可知的原因,我们docker默认的镜像点是在hub.docker.com的,所以在拉取镜像的时候异常的缓慢,需要加一些加速点(和pip加速原理类似),个人比较推荐阿里云加速点,方便,稳定

启动事项

首先准备好本地的工作目录

然后切换到 /Users/brucedone/Scripts/docker_compose/portia,新建一个文件 docker-compose.yml 内容如下

使用命令

然后等正常运行完之后,打本浏览器http://127.0.0.1:9001/ ,就可以正常的看到如下的画面

使用指南

参考这 [可视化抓取]portia2.0尝鲜体验以及自动化畅想[1]

请保证自己的界面已经出现 列表数据

为什么要强调列表数据呢,我们在大多数的爬虫场景,都是针对一个列表页来提取item ,所以我们通过这样的操作才能了解一个具体的爬虫怎样的运作的

代码分析

结构分析

切换到我们的实际的目录 /Users/brucedone/Projects/portia_projects
我们看一下目录里面就已经有我们刚刚创建的项目,我这里是以cnblogs为例子来做的,所以我本地的目录里面就只有cnblogs,切换到目录里面

  • items.json 我们在前端操作的对字段的定义
  • settings.py 常规的配置文件
  • dd60-46f2-bbea 就是我本次执行的数据模版
  • www.cnblogs.com.json 关于整个spider的配置
  • dd60-46f2-bbea.json – 关于我们前端做出的点点出来的xpath 选择的配置文件

关键分析

  • www.cnblogs.com.json
  • dd60-46f2-bbea.json

www.cnblogs.com.json

我们首先看看里面的内容

里面的links_to_follow ,follow_patterns,allowed_domains

就是在前端的体现,这里我们暂时先留住,暂时不写内容,只是做一个简单的测试,再后面的文章中我们会进一步hook这个内容点的

dd60-46f2-bbea.json

我们重点关注两个字段

这是列表的根节点,简单来说我们拿到"selector": "#post_list", 这个选择方法,使用xpath的语法//*[@id="post_list"] 就可以列表的的根容器,接下来我们看item节点

我们直接查看"selector": ".post_item_body", ,使用xpath语法 //*[@id="post_list"]//*[@class="post_item_body"],就可以拿到我们想要的列表元素了,怎么样,是不是也觉得很方便?我们再来看看属性节点

这里就不一一分析了,到这一个层级我们已经拿属性结点了,所以,总结来看

如果我们直接拿这个json,放在自己的spider里面也完全可以,你要知道,scrapy已经支持这种语法了

这样的直接返回 纯 dict的item 语法了

总结分享

本次主要从

  • docker-compose 安装以及挂载本地目录
  • portia生成的数据模板分析
  • 模板的原理以及和我们自己的scrapy项目结合进行分析
点赞
  • :razz: :razz: :razz:

    • bruce

      大神好

  • jale

    我不是用daocker搭建的,我是直接部署github上的源码,,,但是配置数据存储路径后,,没发现有数据呀?您知道portia抓取的数据存储在哪儿?或者怎么配置存储(mysql,,本地)(我配置mysql运行init_mysql_db会报错,所以我配置成本地存储,但依然没有数据输出)

    • bruce

      ?如果你直接使用源码,你使用portia只是生成相应的文件夹和json相关文件了,配置爬虫输出到本地那就直接将生成的爬虫的pipeline.py文件写好,正常运行爬虫就可以了。

  • hangox

    大神好 :evil: ,你的文章给我帮助很多!!!

    • bruce

      客气了,能帮助你就好