关于Java爬虫的研究
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Java爬虫的研究相关的知识,希望对你有一定的参考价值。
起因
最近突然发了羊癫疯,对爬虫十分感兴趣,开始想写几个爬虫练练手,于是,洗手开搞。
像我这种懒人,对爬虫了解个大概之后就开始偷懒了,开始找框架了,Google关键字“Java 爬虫”,第一个搜索结果就是
高票回答推荐的几款爬虫框架:nutch、Heritrix、crawler4j、WebCollector和WebMagic,果断选择了WebMagic,支持国人作品嘛(肯定是中文文档啊)
下手
使用Maven添加框架到项目中,在poxm.xml文件中添加以下依赖。国内的Maven库居然没有WebMagic,泪奔,顶着延迟添加了依赖。
<dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.5.3</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.5.3</version> </dependency>
依赖添加成功如下图所示:
直接从开发文档的例子入手,主要是有三个部分:
- 抓取网站的相关配置
- 抽取页面信息的方法
- 发现后续url地址
WebMagic提供了一个Site类用于设置抓取网站的相关属性,例如,设置失败时重试次数为3次,抓取间隔为1秒的代码如下所示:
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
抽取页面信息的方法
WebMagic通过重写PageProcessor的process()方法来实现爬虫的基本逻辑功能。
WebMagic提供了四种用于抽取数据的方法:
对于html内容来说,可以通过XPath、CSS选择器和正则表达式这三种方法抽取内容;对于JSON格式的数据可以通过JsonPath方法抽取内容。
下面是抽取内容的API表:
方法 | 说明 | 示例 |
---|---|---|
xpath(String xpath) | 使用XPath选择 | html.xpath("//div[@class=‘title‘]") |
$(String selector) | 使用Css选择器选择 | html.$("div.title") |
$(String selector,String attr) | 使用Css选择器选择 | html.$("div.title","text") |
css(String selector) | 功能同$(),使用Css选择器选择 | html.css("div.title") |
links() | 选择所有链接 | html.links() |
regex(String regex) | 使用正则表达式抽取 | html.regex("\\<div\\>(.*?)\\") |
regex(String regex,int group) | 使用正则表达式抽取,并指定捕获组 | html.regex("\\<div\\>(.*?)\\",1) |
replace(String regex, String replacement) | 替换内容 | html.replace("\\","") |
发现后续url地址
一个站点的页面是非常多的,那么我们怎么在发现并抽取了一个页面之后进行链式的挖掘呢?这事爬虫程序非常关键的部分,对链式
答案是通过正则表达式构造待挖掘的url格式,调用page对象(不是页面对象page,是process()方法提供的参数对象page)的addtargetRequests()方法,将url添加到待挖掘的url中。
以上是关于关于Java爬虫的研究的主要内容,如果未能解决你的问题,请参考以下文章