网页css js 抓取助手(《开源精选》本期、Gitee等开源社区中优质项目的栏目)

优采云 发布时间: 2022-01-13 22:18

  网页css js 抓取助手(《开源精选》本期、Gitee等开源社区中优质项目的栏目)

  《开源精选》是我们在Github、Gitee等开源社区分享优质项目的专栏,内容包括技术、学习、实用和各种有趣的内容。本期推荐的NEOCrawler(中文名:牛卡)是一个由nodejs、redis、phantomjs实现的爬虫系统。代码完全开源,适合垂直领域的data采集和爬虫的二次开发。

  主要特征

  使用nodejs实现,javascript简单、高效、易学,为爬虫的开发和爬虫用户的二次开发节省了大量时间;nodejs使用Google V8作为运行引擎,性能相当可观;由于 nodejs 语言本身的非阻塞和异步特性,运行爬虫,例如 IO 密集型 CPU 不敏感系统,表现非常好。与其他语言版本相比,开发量小于C/C++/JAVA,性能高于JAVA的多线程实现和Python的异步和携程方式。完成。

  调度中心负责网站的调度,爬虫进程以分布式方式运行,即中央调度器在单个时间片内统一决定爬取哪些网站,协调各个爬虫的工作。爬虫的单点故障不会影响整个系统。

  爬取时,爬虫对网页进行结构化分析,提取出需要的数据字段,不仅存储网页的源代码,还存储结构化的字段数据,不仅使数据在网页后立即可用被爬取,而且便于实现存储过程中内容的精确排序和重新排序。

  phantomjs 是集成的。Phantomjs 是一个不需要图形界面环境的 Web 浏览器实现。可以用来爬取需要执行js生成内容的网页。通过js语句在页面上执行用户动作,实现表单填写提交,然后抓取下一页内容,点击按钮,然后跳转页面再抓取下一页内容等。

  它集成了代理IP使用功能。该功能针对防爬网站(仅限单IP下爬虫的访问量、流量、智能判断),需要提供一个可用的代理IP,爬虫会选择source 网站 也可以访问代理IP地址,source 网站 不能阻止爬取。

  可配置项目:

  1)。用正则表达式描述,相似的网页被组合在一起并使用相同的规则。爬虫系统(以下各项指某些类型的URL配置项);

  2)。起始地址、获取方式、存储位置、页面处理方式等;

  3)。需要采集的链接规则,使用CSS选择器限制爬虫只采集出现在页面某个位置的链接;

  3)。页面抽取规则,可以使用CSS选择器和正则表达式来定位各个字段内容要抽取的位置;

  4)。预定义页面打开后要注入执行的js语句;

  5)。网页上的默认cookie;

  6)。判断该类网页是否正常返回的规则是指定部分网页恢复正常后必须存在的关键词,以供爬虫检测;

  7)。数据抽取是否完整的判断规则,从抽取的字段中选择几个非常必要的字段作为抽取完整性的评价标准;

  8)。此类网页的调度权重(优先级)和周期(重新获取和更新的时间)。

  建筑学

  

  图中*敏*感*词*部分是爬虫系统的各个子系统

  SuperScheduler 是一个中央调度器。爬虫将采集到的 URL 放入各种 URL 对应的 URL 库中。SuperScheduler 会根据调度规则从各个 URL 库中抽取相应数量的 URL 放入待爬取队列中。

  Spider是一个以分布式方式运行的爬虫程序。它将任务从调度器调度的待爬取队列中取出进行爬取,将找到的URL放入URL库,存储提取的内容,将爬虫程序划分为一个核心。并下载、解压、流水线4个中间件,以便轻松重新定制爬虫实例中的功能之一。

  ProxyRouter 在使用代理 IP 时智能地将爬虫请求路由到可用的代理 IP。

  webconfig是一个网络爬虫规则配置后台。

  运行步骤

  运行环境准备

  create 'crawled',{NAME => 'basic', VERSIONS => 3},{NAME=>"data",VERSIONS=>3},{NAME => 'extra', VERSIONS => 3}

create 'crawled_bin',{NAME => 'basic', VERSIONS => 3},{NAME=>"binary",VERSIONS=>3}

  推荐使用 hbase rest 方法。启动hbase后,在hbase目录的bin子目录下执行以下命令启动hbase rest:

  ./hbase-daemon.sh start rest

  默认端口为 8080,将在以下配置中使用。

  ##[实例配置]

  实例在实例目录下,复制一份example,并重命名其他实例名,例如:abc,后面的描述中以abc为例。

  编辑 instance/abc/setting.json

  {

/*注意:此处用于解释各项配置,真正的setting.json中不能包含注释*/

"driller_info_redis_db":["127.0.0.1",6379,0],/*网址规则配置信息存储位置,最后一个数字表示redis的第几个数据库*/

"url_info_redis_db":["127.0.0.1",6379,1],/*网址信息存储位置*/

"url_report_redis_db":["127.0.0.1",6380,2],/*抓取错误信息存储位置*/

"proxy_info_redis_db":["127.0.0.1",6379,3],/*http代理网址存储位置*/

"use_proxy":false,/*是否使用代理服务*/

"proxy_router":"127.0.0.1:2013",/*使用代理服务的情况下,代理服务的路由中心地址*/

"download_timeout":60,/*下载超时时间,秒,不等同于相应超时*/

"save_content_to_hbase":false,/*是否将抓取信息存储到hbase,目前只在0.94下测试过*/

"crawled_hbase_conf":["localhost",8080],/*hbase rest的配置,你可以使用tcp方式连接,配置为{"zookeeperHosts": ["localhost:2181"],"zookeeperRoot": "/hbase"},此模式下有OOM Bug,不建议使用*/

"crawled_hbase_table":"crawled",/*抓取的数据保存在hbase的表*/

"crawled_hbase_bin_table":"crawled_bin",/*抓取的二进制数据保存在hbase的表*/

"statistic_mysql_db":["127.0.0.1",3306,"crawling","crawler","123"],/*用来存储抓取日志分析结果,需要结合flume来实现,一般不使用此项*/

"check_driller_rules_interval":120,/*多久检测一次网址规则的变化以便热刷新到运行中的爬虫*/

"spider_concurrency":5,/*爬虫的抓取页面并发请求数*/

"spider_request_delay":0,/*两个并发请求之间的间隔时间,秒*/

"schedule_interval":60,/*调度器两次调度的间隔时间*/

"schedule_quantity_limitation":200,/*调度器给爬虫的最大网址待抓取数量*/

"download_retry":3,/*错误重试次数*/

"log_level":"DEBUG",/*日志级别*/

"use_ssdb":false,/*是否使用ssdb*/

"to_much_fail_exit":false,/*错误太多的时候是否自动终止爬虫*/

"keep_link_relation":false/*链接库里是否存储链接间关系*/

}

  跑

  在网页界面配置爬取规则

  调试单个URL爬取是否OK

  运行调度器(调度器可以启动一个)

  如果使用代理 IP 获取,则启用代理路由

  启动爬虫(爬虫可以启动多个分布式)

  下面是具体的启动命令

  1.运行WEB配置(配置规则见下一章)

  node run.js -i abc -a config -p 8888

  在浏览器中打开:8888可以在网页界面配置爬取规则

  2.测试单页爬取

  node run.js -i abc -a test -l "http://domain/page/"

  3.运行调度器

  node run.js -i abc -a schedule

  4.仅当使用代理 IP 捕获时才需要运行代理路由

  node run.js -i abc -a proxy -p 2013

  这里的 -p 指定代理路由的端口。如果在本地运行,setting.json的proxy_router和端口为127.0.0.1:2013

  5.运行爬虫

  node run.js -i abc -a crawl

  可以在instance/example/logs下查看输出日志debug-result.json

  Redis/ssdb数据结构

  了解数据结构将有助于您熟悉整个系统进行二次开发。Neocrawler使用了4个存储空间,driller_info_redis_db、url_info_redis_db、url_report_redis_db、proxy_info_redis_db,可以在实例下的settings.json中配置,4个空间的存储类型不同。键名不会冲突,可以将4个空格指向一个redis/ssdb库,每个空间的增长量不同。如果使用redis,建议每个空间指向一个db,有条件的情况下一个redis指向一个空间。

  Driller_info_redis_db

  存储抓取规则和 URL

  url_info_redis_db

  这个空间存放的是URL信息,爬取操作时间越长,这里的数据量就越大。

  url_report_redis_db

  这个空间存储爬虫报告

  proxy_info_redis_db

  此空间存储与代理 IP 相关的数据

  更多内容:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线