写一个方便爬取今日头条信息流而写的Chrome插件

write a chrome plugin for crawing InfoFlow of Toutiao.com

Posted by 宸笙 on June 26, 2018

PluginForCrawToutiao

方便爬取今日头条信息流而写的Chrome插件,已开源

起因

去年笔者负责公司的信息流SDK的后端爬虫任务,调研了不同的实现方式,也发现了几大信息流网站均是在浏览器本地渲染的,亦即用传统的jsoup等爬虫都是很难拿到想要内容的,后来笔者另辟蹊径想到了一种取巧的方式:写Chrome插件,用插件去获取页面元素并提交到Bmob后端。

大致过程和源码介绍

  1. 在确定了思路后,浏览Chrome平台的Api和具体实现断断续续不超过两天;
  2. 基本思路:

    是在客户端上找突破口,发现浏览器对开发者的开的后门–浏览器插件;然后就是结合Chrome的例子调用page标签页的内容包括页面标题和具体的dom元素等,也因为头条页面dom元素是相对稳定的,确定可行;考虑保存到线上服务器就集成了Bmob的JSSDK并保存到Bmob后端(无模式存储,无需事先建表,后续可动态修改表结构);

  3. 源码(项目结构)介绍

    如图:

    image

    源码在popup.js文件中,基本思路是拿到页面元素内容截取出我们想要的基本内容如信息流的标题,body内容,富文本内容,图片,来源等并调用BmobJSSDK的Api实现数据保存,很简单对吧;

    其中的appid和restkey对应你在Bmob平台创建的应用的配置信息,换成你自己的应用对应的配置即可。

    manifest.json文件是对插件的描述信息,比如插件名,所需权限等,类似gulp等脚手架的package.json文件;

    icon图标代表插件的图标;

  4. 使用(集成)方式

    (1) 打开Chrome浏览器的扩展程序页面并打开开发者模式;(更多工具->扩展程序或直接在地址栏输入 chrome://extensions/);

    (2) 选择加载已解压的扩展程序,选择项目对应的文件夹;

    (3) 此时就能在右上方看到插件icon了。 image

  5. 效果预览

    如下

  6. 后续

    可以修改代码并做到尽量通用化;

    结合具体业务做到自动化,比如用Java启动浏览器的插件并定时执行,实现自动化爬虫;

    配合GUI配置工具提供给运营同事定义采集需求,比如指定信息流平台和频道,来源等(或者用DSL的配置方式);