java htmlparser 代理_JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

关于爬虫,之前一直用做第一个站的时候,记得那时候写的爬虫是爬sina的数据,用的就是 htmlparser可能是由于好奇和满足我当时的需求,那开始就各种写啊,一个页面,把需要的内容处理下来,复杂的写完后不写注释自己都看不懂,一直我也知道JSOUP好,也感觉没空学习新的爬虫(完全是借口啊)。最近我试了一下用JSOUP,尼玛,完全爱上了,完全秒杀 htmlparser。PS:用过都知道JSOUP是支持css select(CSS选择器),对于我这样的jQuery用的非常6666的人来说,哪就是一个字,爽死了。

org.jsoup

jsoup

1.9.2

下面展示的代码是,实现了相同的一个业务,爬取了百度的一些内容。但是你可以看到,Htmlparser繁琐,JSOUP轻量级。不多说下面看代码。

Htmlparser Java代码:String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";

/**开始爬取*/

Parser parser = new Parser(url);

//设置字符集

parser.setEncoding("utf-8");

//创建一个filter

NodeFilter contentFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id","content_left"));

//通过Filter过滤

NodeList contents = parser.parse(contentFilter);

//再创建Filter,用途通过父类去过滤子类

NodeFilter divsFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("data-tools"));

NodeList divs = contents.extractAllNodesThatMatch(divsFilter,true);

//取值

for (int i = 0; i < divs.size(); i++) {

Div div = (Div) divs.elementAt(i);

String json = div.getAttribute("data-tools");

if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){

//获取到json

JSONObject jsonObj = JSONObject.fromObject(json.trim());

//获取url

String durl = jsonObj.getString("url");//内容url

//do something

}

}

相同业务之后改成 JSOUP Java代码:String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";

Document doc = Jsoup.connect(url).get();

Elements divs = doc.select("div#content_left div[data-tools]");

for (Element element : divs) {

String json = element.attr("data-tools");

if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){

//获取到json

JSONObject jsonObj = JSONObject.fromObject(json.trim());

//获取url

String durl = jsonObj.getString("url");//内容url

//do something

}

}

瞬间你看看,逻辑思维都符合现在流行的链式编程。

JSOUP创建一个模拟浏览器行为的请求头:Document doc = Jsoup.connect(url)

.header("Accept", "*/*")

.header("Accept-Encoding", "gzip, deflate")

.header("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")

.header("Referer", "https://www.baidu.com/")

.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")

.timeout(5000)

.get();

然后就开启jQuery模式了。//获取id = 1 的元素的文本值。

doc.select("#1").text();

//获取id = 1 的元素的HTML值。

doc.select("#1").html();

//获取id =1 直接子类class='css1' , 然后所有子类的含有class = css2 的集合

doc.select("#id > .css1 .css2");

.....

后面我会采用视频讲解的方式,结合实战去讲解。等着吧,我现在在整理FreeMarker的视频!

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

¥我需要走的更远,点击我 赞助。

如果还有疑问,点击我加群,为你提供最好的解答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值