码迷,mamicode.com
首页 > 编程语言 > 详细

关于Java爬虫的研究

时间:2016-05-20 19:19:26      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

起因

最近突然发了羊癫疯,对爬虫十分感兴趣,开始想写几个爬虫练练手,于是,洗手开搞。

像我这种懒人,对爬虫了解个大概之后就开始偷懒了,开始找框架了,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爬虫的研究

标签:

原文地址:http://www.cnblogs.com/sdzbzjh/p/5512297.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!