一、爬蟲原理爬蟲就是去請求某個url,然后將響應的頁面進行解析,將解析到" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 手擼了一個java爬蟲,發(fā)現(xiàn)了c站這么多大佬

手擼了一個java爬蟲,發(fā)現(xiàn)了c站這么多大佬

時間:2023-04-24 11:45:02 | 來源:網(wǎng)站運營

時間:2023-04-24 11:45:02 來源:網(wǎng)站運營

手擼了一個java爬蟲,發(fā)現(xiàn)了c站這么多大佬:今天我們使用Java語言寫一個爬蟲,用來爬取csdn首頁推薦博客的博主,看看這些博主有多少人在寫微信公眾號。

一、爬蟲原理

爬蟲就是去請求某個url,然后將響應的頁面進行解析,將解析到的數(shù)據(jù)保存,同時解析出當前頁面的url,繼續(xù)進行爬取,一直循環(huán)下去,爬取當前網(wǎng)站的內(nèi)容。







二、分析CSDN頁面數(shù)據(jù)

因為我們的目標很明確,就是去分析首頁推薦博客博主寫微信公眾號的比例,因此我們只需要找到我們需要的數(shù)據(jù)進行保存即可,不需要爬取網(wǎng)站的全部數(shù)據(jù)。

2.1 找到CSDN首頁的博客鏈接













根據(jù)目標元素,我們可以提取兩個關鍵元素,其一是目標鏈接在<a></a>中,其二是博客地址的格式為https://blog.csdn.net/+"用戶名"+/article/details/+"文章標識"(記住這個博客地址,后面有用)。

2.2 提取設置了公眾號信息的博主

在文章詳情頁面有博主相關的信息,csdn博客左側(cè)有一塊<div>是博主用來自定義信息的,如下圖:







還是一樣,f12來查看DOM元素,發(fā)現(xiàn)這一塊內(nèi)容在id=asideCustom的<div>中。







2.3 爬取思路

  1. 通過爬取首頁,解析出所有a標簽
  2. 篩選a標簽,根據(jù)博客地址格式,匹配到所有的博客地址
  3. 爬取博客地址,解析id=asideCustom的<div>
  4. 如果第3步可以解析出來,則說名該博主設置了自定義信息

三、編寫爬蟲

根據(jù)上面的分析我們需要兩個工具包,一個是httpclient用于網(wǎng)絡請求,另一個是用來解析DOM元素的jsoup

<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.10</version></dependency>?<!-- 添加jsoup支持 --><dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.1</version></dependency>網(wǎng)絡調(diào)用偽代碼

public static ArrayList<Document> HttpUtil(HashSet<String> urls){ CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; ArrayList<Document> list = new ArrayList<>(); try { for(String url : urls){ HttpGet request = new HttpGet(url); response = httpClient.execute(request);? //判斷響應狀態(tài)為200,請求成功,進行處理 if(response.getStatusLine().getStatusCode() == 200) { HttpEntity httpEntity = response.getEntity(); String html = EntityUtils.toString(httpEntity, "utf-8"); Document document = Jsoup.parse(html); list.add(document); } else { System.out.println("返回狀態(tài)不是200"); } } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { HttpClientUtils.closeQuietly(response); HttpClientUtils.closeQuietly(httpClient); } return list;}調(diào)用及解析偽代碼

public static void main(String[] args) {? // 標記有多少博主設置了自定義信息 int i = 0; // 首頁url HashSet<String> url = new HashSet<>(); // 文章urls HashSet<String> articleUrls = new HashSet<>(); url.add("https://www.csdn.net/"); // 爬取csdn首頁 ArrayList<Document> list = HttpUtil(url); // 選擇a標簽 for(Document document : list){ Elements a = document.select("a"); for(Element element : a){ // 獲取a中的url // <a href = "https://xxxx"> </a> String href = element.attr("href"); // 篩選博客地址 if(href.contains("article/details")){ articleUrls.add(href); } } } ArrayList<Document> list2 = HttpUtil(articleUrls); for(Document document : list2){ Element asideCustom = document.getElementById("asideCustom"); if(asideCustom != null){ i++; } } // 輸出爬取的文章數(shù)量 和 設置了自定義信息的博主數(shù)量 System.out.println("爬取的文章數(shù)量="+articleUrls.size()+"/n"+"寫公眾號的博主數(shù)量="+i);}控制臺輸出信息

爬取的文章數(shù)量=25寫公眾號的博主數(shù)量=5

四、結(jié)尾

從上面的結(jié)果中可以看出,在25篇博客中,就有五個博主在寫公眾號。但是,這個數(shù)據(jù)并不能說明csdn的1/5博主就在更新自己的公眾號。

  1. csdn首頁推薦數(shù)據(jù)是分頁拉去的,爬蟲只能爬取到第一頁的數(shù)據(jù),也就是25條
  2. 有些博主雖然設置了自定義信息,但是并不是公眾號
  3. 有些博主雖然沒有設置自定義信息,但是在簡介或者其他地方留了公眾號名稱
不過這些都沒關系,本文的重點是使用java語言寫個爬蟲程序,來爬取目標數(shù)據(jù)。

關鍵詞:爬蟲

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉