关于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爬虫的研究的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

scrapy主动退出爬虫的代码片段(python3)

初识Java爬虫之Jsoup,提供参考代码

关于python网络爬虫——摘取新闻标题及链接

如何在片段中使用 GetJsonFromUrlTask​​.java

如何正确地将多个片段添加到片段过渡?