自己一直对爬虫比较感兴趣,大学的毕业论文也是一个爬虫项目(爬教务处信息,然后做了个Android版教务管理系统,还获得了优秀毕业设计的称号),自那以后遇到自己感兴趣的网站就会去抓一下。前段时间工作上需要一些JD信息,我就从网上找了个开源的爬虫框架WebMagic,使用简单,易配置,功能也很强大,当然了也有些网站的数据不适合使用。前前后后写了不下十几个,慢慢的就想是不是可以把这些爬虫代码再抽象出来,做出一个简易的爬虫框架呢?于是就尝试去看WebMagic的源码,后来又发现了一个源码比较容易解读的爬虫框架XXL-CRAWLER,简单的分析了源码之后,开发自己一套爬虫框架的欲望更加强烈,于是在2017年底的时候就开始了开发,中间断断续续得停了写,写了停。直到最近8月底的时候才算出了一个版本,然后顺势把它放到了Maven公服仓库上。一个人的力量很薄弱,要想完善这个爬虫的健壮性、可用性和易扩展性还需要大家的力量!
语言: Java开发,框架比较简单,多处使用的是接口编程,是学习Java不错的例子
难度: 及其简单,配置一下,写个解析逻辑,整理下保存方法,就OK了
轻量: 使用Jsoup做默认的下载器,依赖性较低
线程: 可自主**设置线程**数抓取,提高抓取效率
重试: 支持失败重试,次数可以自定义
代理: 支持配置**代理池**,默认随机使用代理IP,也可自定义算法获取
去重: **双重去重**,默认对URL去重,也可以定义第二层去重逻辑
控制: 可**自主控制**是否需要解析页面,减少资源的使用
精准: 通过设置URL的正则来**精准**的解析每一个URL
扩展: 几乎每一个环节都可以自定义
在http://search.maven.org上使用最新的版本
在pom中引入
<dependency> <groupId>com.github.vector4wang</groupId> <artifactId>vw-crawler</artifactId> <version>${last.version}</version> </dependency>
可以在项目主页的[release](https://github.com/vector4wang/vw-crawler/releases)下载最新版本jar,然后导入自己的项目中。
配置参数
抽象正则
解析页面
保存数据
各环节均支持自定义
设置爬虫的基本配置,如User-Agent、起始地址、目标页面的url正则表达式、线程数和超时时间等
new VWCrawler.Builder() // 配置参数 .setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36") // 设置请求头 .setUrl("https://blog.csdn.net/qqhjqs") // 设置爬虫起始地址 .setThreadCount(10) // 设置几个线程抓取数据 .setTimeOut(5000) // 设置超时时间 // 抽象正则 .setTargetUrlRex("https://blog.csdn.net/qqhjqs/article/details/[0-9]+") // 设置目标页面url的正则表达式 // 解析页面 .setPageParser(new CrawlerService<Blog>() { /** * 有的url可能在某个场景下不需要可在此处理 * 默认返回false,可以不做处理 * @param url 即将要抓取的url * @return */ @Override public boolean isExist(String url) { if ("https://blog.csdn.net/qqhjqs/article/details/79101846".equals(url)) { return true; } return false; } /** * 有的页面有WAF,可以再真正解析前,做个判断,遇到特殊标志的直接可以跳过 * 默认返回true,可以不做处理 * @param document 即将要解析的document * @return */ @Override public boolean isContinue(Document document) { if ("最近和未来要做的事 - CSDN博客".equals(document.title())) { System.out.println("模拟遇到WAF此页面不做解析"); return false; } return true; } /** * 目标页面的doc对象,还有通过注解处理后的对象 * @param doc 文档内容 * @param pageObj 封装的对象 */ @Override public void parsePage(Document doc, Blog pageObj) { // 可进行二次处理 pageObj.setReadNum(pageObj.getReadNum().replace("阅读数:", "")); } // 保存数据 /** * 可以做保存对象的处理 * @param pageObj 页面对象 */ @Override public void save(Blog pageObj) { System.out.println("save blog summery: " + pageObj.toString()); } }) // 自定义解析service .build().start(); // 启动
配置页面数据对象的注解
@CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-title-box > h1", resultType = SelectType.TEXT) private String title; @CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-info-box > div > span.time", dateFormat = "yyyy年MM月dd日 HH����ss") private Date lastUpdateDate; @CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-info-box > div > div > span", resultType = SelectType.TEXT) private String readNum;
这里使用比较流行的注解方式,通过cssselector来获取节点数据可通过resultType来指定填充的是text还是html。随便配置一下,就能抓取一个页面的数据
new VWCrawler.Builder().setUrl("https://www.qiushibaike.com/").setPageParser(new CrawlerService() { @Override public void parsePage(Document doc, Object pageObj) { System.out.println(doc.toString()); } @Override public void save(Object pageObj) { } }).build().start();
主要内容:Scrapy下载安装,创建Scrapy爬虫项目,Scrapy爬虫工作流程,settings配置文件Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。 提示:Twisted 是一个基于事件驱动的网络引擎框架,同样采用 Python 实现。 Scrapy下载安装 Scrapy 支持常见的主流平台,比如 Linux、Mac、Windows 等,因此你可以很方便的安装它
有的时候,当我们的爬虫程序完成了,并且在本地测试也没有问题,爬取了一段时间之后突然就发现报错无法抓取页面内容了。这个时候,我们很有可能是遇到了网站的反爬虫拦截。 我们知道,网站一方面想要爬虫爬取网站,比如让搜索引擎爬虫去爬取网站的内容,来增加网站的搜索排名。另一方面,由于网站的服务器资源有限,过多的非真实的用户对网站的大量访问,会增加运营成本和服务器负担。 因此,有些网站会设置一些反爬虫的措施。我
这一章将会介绍使用一些新的模块(optparse,spider)去完成一个爬虫的web应用。爬虫其实就是一个枚举出一个网站上面的所有链接,以帮助你创建一个网站地图的web应用程序。而使用Python则可以很快的帮助你开发出一个爬虫脚本. 你可以创建一个爬虫脚本通过href标签对请求的响应内容进行解析,并且可以在解析的同时创建一个新的请求,你还可以直接调用spider模块来实现,这样就不需要自己去写
WebMagic是我业余开发的一款简单灵活的爬虫框架。基于它你可以很容易的编写一个爬虫。 这本小书以WebMagic入手,一方面讲解WebMagic的使用方式,另一方面讲解爬虫开发的一些惯用方案。
根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 就是 捜索引擎抓取系统,目的是将互联网上的所有的网页下载到本地,形成一个互联网内容的镜像备份。 它决定着整个搜索引擎内容的丰富性和时效性,因此它的性能优劣直接影响着搜索引擎的效果。 通用搜索引擎(Search Engine)工作原理 第一步:抓取网页 搜索引擎网络爬虫的基本工作流程如下: 首先选取一部分的初始UR
本文向大家介绍python爬虫框架talonspider简单介绍,包括了python爬虫框架talonspider简单介绍的使用技巧和注意事项,需要的朋友参考一下 1.为什么写这个? 一些简单的页面,无需用比较大的框架来进行爬取,自己纯手写又比较麻烦 因此针对这个需求写了talonspider: •1.针对单页面的item提取 - 具体介绍点这里 •2.spider模块 - 具体介绍点这里 2.介
爬虫项是什么呢?比如采集文章列表、文章详情页,他们都是不同的采集项。 定义示例: 继承Yurun\Crawler\Module\Crawler\Contract\BaseCrawlerItem类。 <?php namespace Yurun\CrawlerApp\Module\YurunBlog\Article; use Imi\Bean\Annotation\Bean; use Yurun\C
拼多多爬虫工程师面试题 电话面: http协议、tcp协议(几次握手) top命令 Linux/Mac 下虚拟内存(Swap) 线程、进程、协程 Async 相关、事件驱动相关 阻塞、非阻塞 Python GIL 布隆过滤器原理:如何实现、一般要几次哈希函数 给我留下了一个作业:抓取天猫超市上某些商品的可以配送省份信息。(当时做这个也花了很久,主要是需要解决PC端的登陆问题,后来通过h5接口) 现