大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。
前言
爬虫,大家都听过,可能好多人的第一印象,就是使用python
进行操作,但是除了python
之外,其他语言可以操作不?
答案是肯定的,今天我们就来看看如何使用java
采集网页上的信息。
起因
起因是这样的,社群内好多粉丝都喜欢看每日分享的新闻,于是就写了个定时给微信群中推送新闻40条,后来,有人说,有没有历史上的今天,我找了找,也有。于是就把历史上的今天也加进去。
但是历史上的今天内容从哪里来的呢?从一个网页上采集下来的。
采集步骤
在java
中,以前还真没有过类似的场景,于是问了下claude
,找到了答案,下面我整理出来分享给大家。
- 在
pom
文件中添加依赖。
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
- 写一个公共的方法,我这边为了高复用性,所以写了个工具类
CollectWebDataUtils
。
其中有两个方法:
public String getCom(String date,Integer tag){
String history = "";
String url = "http://xxxx.com/today/"+date+".html";
if(tag==0){
history = getHistoryToday(url).toString();
}
return history;
}
public JSONObject getHistoryToday(String url){
JSONObject jsonObject = new JSONObject();
Document doc = null;
try {
doc = Jsoup.connect(url).get().body().ownerDocument();
Elements theiaStickySidebar = doc.getElementsByClass("sidemain");
Elements wz = theiaStickySidebar.first().getElementsByClass("wz");
Elements lis = wz.select("li");
JSONArray array = new JSONArray();
for (Element li : lis) {
JSONObject jsonObject_li = new JSONObject();
Elements li_a = li.select("a");
jsonObject_li.put("year",li_a.get(0).text());
jsonObject_li.put("days",li_a.get(1).text());
jsonObject_li.put("content",li_a.get(2).text());
array.add(jsonObject_li);
}
jsonObject.put("history",array);
} catch (IOException e) {
e.printStackTrace();
}
return jsonObject;
}
然后就可以了,最后我们调用一下进行测试
public static void main(String args[]) {
CollectWebDataUtils col = new CollectWebDataUtils();
String result = col.getCom("2023-04-22",0);
JSONObject object = JSONObject.parseObject(result);
JSONArray contentList = object.getJSONArray("history");
contentList.forEach(item->{
JSONObject arrayObject = new JSONObject();
JSONObject itemObject = (JSONObject)item;
String year = itemObject.getString("year");
String days = itemObject.getString("days");
String content = itemObject.getString("content");
System.out.println(year+"-"+days+":"+content);
});
}
- getElementsByClass:获取class元素
- first:获取第一个元素
- select:获取所有的某个标签
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)