爬虫(使用Jsoup)完成搜狐新闻信息爬取"/>
java实现简单爬虫(使用Jsoup)完成搜狐新闻信息爬取
今天突发奇想,由于自己开发的项目是一个死的,任何东西都是自己发布的,因此是否可以实现一个简单爬虫,来让程序执行呢?
使用Jsoup来实现简单java网络爬虫。
Jsoup是一款Java的HTML解析器,主要用来对HTML代码的。他可以让你的java程序想JavaScript一样可以按标签查找你所需要的信息,Jsoup非常好的一点是即使网页中源码布局非常不规整,Jsoup都可以自动将HTML程序布局规整。Jsoup缺点就是,它只支持静态页面的爬取,比如今日头条,它是用js渲染得到的,就无法使用Jsoup来进行爬取了,这时需要使用Jsoup+HttpUnit来实现。 Jsoup使用文档:Jsoup开发指南
今天以搜狐新闻为例来爬取信息。
第一步导入Maven依赖:
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version>
</dependency>
接下来示范代码,爬取的是搜狐新闻一部分的信息(并没有全部爬下来),主要是用法,实现代码如下(其中夹杂一下我的过程处理代码,比如for循环中的各个if语句,可以根据自己需求来设置):
package com.jsoup;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.*;
// 爬取搜狐新闻部分信息
public class JsoupTest {public static void main(String[] args) throws IOException {Document doc = Jsoup.connect("/").get();// 2.jsoup获取新闻<a>标签Elements newsATags = doc.select("div.main-right").select("div.list16").select("ul").select("li").select("a");for (Element element:newsATags){String url=element.attr("href");if(url.indexOf("//")==0 || url.indexOf("/")<0)continue;String title=element.attr("title");Document dm=Jsoup.connect(url).get();Elements em=dm.select("p").select("img");if(em==null || em.size()<1)continue;String img=em.get(0).attr("src");if(img.indexOf("//")==0){img=img.substring(2);}System.out.println("url: "+url+" title: "+title+" image: "+img);}}
}
输出结果如下:
url: title: 港媒列示威者“十宗罪” 追问港铁为何“双标”对待 image: .jpeg
url: title: 内地游客在香港当街被抢 手及腹部受伤损失1万余元人民币 image: .png
url: title: 紧随脸书推特 YouTube删除210个涉港账号 image: .jpeg
url: title: 31省份低保标准公布:上海、北京、天津位居前三 image: .jpeg
url: title: 工信部:达量限速套餐等影响网速 4G至少还能用10年 image: .png
url: title: 浦东新区消保委:上海迪士尼不接受调解 坚持翻包检查 image: .jpeg
url: title: 大学老师不写论文都可以评教授?高校回应 image: .jpeg
url: title: 任正非:不会求美国放华为一马 不在贸易协议中委曲求全 image: .jpeg
url: title: 河南被性侵坠亡女生家属:对方曾称愿赔200万了事 image: .jpeg
url: title: 加拿大驻香港总领事馆:暂停本地雇员去中国内地 image: .png
url: title: “亚马孙雨林要烧没了” 一场虚假传播如何在全球掀起? image: .png
url: title: 英国首相踩桌子让马克龙擦鞋?这张照片让网友吵翻了(图) image: .jpeg
url: title: 特朗普为何要购买格陵兰岛?或看上其军事价值和稀土 image: .jpeg
url: title: 哈尔滨一街道多个仓库被淹 商户:未接到水库泄洪通知 image: .jpeg
url: title: 四川丹巴警方通报“女子深夜当街遭男子踢打”:涉案人已到案 image: .jpeg
等等。。。。。
在来一段爬取搜狐娱乐的爬虫代码(和上面一样只爬取一部分代码),实现如下:
package com.jsoup;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.*;public class JsoupTest2 {public static void main(String[] args) throws IOException {Document document= Jsoup.connect("/").get();Elements elements=document.select("div.passage-info");for (Element element:elements){String url=element.select("div.passage-content").select("a").attr("href");if(url.indexOf("//")==0) url=url.substring(2);url="http://"+url;String title=element.select("div.passage-content").select("a").text();String image=element.select("div.passage-image").select("img").attr("src");if(image.indexOf("//")==0) image=image.substring(2);int firstDot=image.indexOf("/");String pre=image.substring(0,firstDot);int lastDot=image.indexOf("images");String end=image.substring(lastDot);image="http://"+pre+"/"+end;System.out.println("url: "+url+" title: "+title+" image: "+image);}System.out.println("OK...");}
}
输出结果如下:
url: title: 淡出谢娜晒照刷存在脖子戴金锁,但金锁范冰冰戴鸽子蛋,对比寒酸 image: .jpg
url: title: 为张翰减肥,把胡彦斌写在书里的郑爽,这次直接把张恒带进了节目 image: .jpeg
url: title: 郑爽与张翰同框是男友张恒特意安排,昔日感情如今已经彻底放下 image: .jpg
url: title: 沈腾为儿子办周岁,“小狮子”可爱呆萌,老婆王琦发福似贾玲 image: .jpeg
url: title: 徐峥在线撒糖,表白妻子陶虹:陶虹是大家的,但我是她的私有财产 image: .jpeg
等等。。。
OK,以上就是使用Jsoup实现的java爬虫,项目代码没办法在这展示,这里就用两个test类来简单实现一下。
更多推荐
java实现简单爬虫(使用Jsoup)完成搜狐新闻信息爬取
发布评论