新闻消息的爬取-jsoup
业务场景:新闻消息爬取,半自动半人工。
新闻来源几个固定网站,人工则是工作人员在网上看到一个需要的消息,直接拷贝网址,然后根据网址自动提取。
消息内容:标题,简介,网址,封面图片
采用开发插件 jsoup,感觉是最方便的简析工具,比htmlparser等好用得多。
一.Jsoup开发参考资料
1. 中文api参考 http://www.open-open.com/jsoup/
2. 参考文档 自行百度
二.使用方法
1. get方法获取
Document doc = Jsoup.connect("http://www.XXX.com").get();
String title = doc.title();
2. post方法获取
Document doc = Jsoup.connect("http://www.XXX.com")
.data("query", "Java") //请求参数
.header("Connection", "close") //设置header
.cookie("auth", "token") //设置cookie
.timeout(3000) //设置连接超时时间
.post(); //使用POST方法访问URL
3. 循环获取图片元素
Elements pngs = doc.select("img[src$=.png]");//所有引用png图片的元素
for (Element png : pngs ) {
String src= link.attr("src");
}
4. 添加属性
doc.select("div.comments a").addClass("mylinkclass");
//为所有链接增加 class=mylinkclass 属性
三.问题合集
1. 中文问题
(1)url路径带中文
中文调用getBytes("utf-8") 进行utf-8编码后再访问
(2)html内容中文乱码
Document document = Jsoup.parse(new URL(url).openStream(), "GBK", url);
//GBK或UTF-8
2. 获取 title 时中文网址返回英文说明
例如访问这个网址https://pomotodo.com/ ,返回的是英文title
Document get时加上这句 header("Accept-Language", "zh-cn,zh;q=0.5")
3.图片路径问题
(1) // 开头,直接添加 http: 即可,这是默认的http协议
(2) / 开头,图片在根目录下
(3) ../ 图片在相对路径目录下