关于Java爬虫的研究

news/2024/7/19 8:46:47 标签: 爬虫, java, json

起因

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

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

转载于:https://www.cnblogs.com/sdzbzjh/p/5512297.html


http://www.niftyadmin.cn/n/1362905.html

相关文章

TOPSIS综合评价模型Python实现

import os import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler scaler MinMaxScaler() """ 熵值法是根据指标所含信息有序程度的差异性来确定指标权重的客观赋权方法 熵用于度量不确定性,仅依赖于数据本身的离散程度; 指…

iostat来对linux硬盘IO性能进行了解

http://www.php-oa.com/2009/02/03/iostat.html转载于:https://www.cnblogs.com/zengkefu/p/5526955.html

关于非对称加密RSA

1.bcprov生成秘钥&#xff0c;KeyPairGenerator获得公钥和私钥。转载于:https://www.cnblogs.com/wsxj99/p/5531393.html

css中的高阶6.6阴影,渐变

1.盒子圆角&#xff1a; box-radius:5px; 2.盒子和 文字的阴影 text-shadow:上 右 半径 颜色&#xff1b; box-shadow:上 右 半径 颜色&#xff1b;需要考虑兼容性 -moz- -ms- 盒子 内阴影 &#xff1a; box-shadow:inset 上 右 半径 颜色&#xff1b; 3. 整体部分的分布 &l…

python 练习 26

Python break语句&#xff0c;就像在C语言中&#xff0c;打破了最小封闭for或while循环。 break语句用来终止循环语句&#xff0c;即循环条件没有False条件或者序列还没被完全递归完&#xff0c;也会停止执行循环语句。 break语句用在while和for循环中。 如果您使用嵌套循环&am…

【C语言】判断并输出素数(试除法)

这是我非常喜欢的一道编程题目。不要小看这道题&#xff0c;它看似简单&#xff0c;实则奥妙无穷。由于这是C语言的入门篇&#xff0c;只介绍最简单&#xff0c;也最容易想到的方法&#xff1a;试除法。但哪怕是试除法&#xff0c;也有不少变化。 要想了解试除法&#xff0c;首…

【C语言】你真的了解C语言吗

C语言1. 前言2. 什么是计算机语言3. 什么是高级语言4. 什么是底层开发5. ANSI C6. 什么是C语言1. 前言 大家好&#xff0c;我是努力学习游泳的鱼。C语言是一门极其重要的计算机语言。所谓C生万物&#xff0c;C语言是编程之本。学号C语言&#xff0c;对以后的编程学习都有很大的…