web-magic + Xpath Java程式員

来源:https://www.cnblogs.com/YDYblog/archive/2020/04/05/12638334.html
-Advertisement-
Play Games

大學畢業一年收穫還是滿滿的!手動滑稽 今天呢,來記錄一個爬蟲項目,用的web-magic實現,不說Java和Python那個更強,只看那個代價更小,與現在我而言自然是Java嘍!同時呢magic也是參考了Scrapy框架的。 先把git地址掏出來:https://gitee.com/xxxx/mag ...


大學畢業一年收穫還是滿滿的!手動滑稽

今天呢,來記錄一個爬蟲項目,用的web-magic實現,不說Java和Python那個更強,只看那個代價更小,與現在我而言自然是Java嘍!同時呢magic也是參考了Scrapy框架的。

先把git地址掏出來:https://gitee.com/xxxx/magicFetch.git(留言給地址)

言歸正傳,先說爬蟲需要什麼:

  1、明確要做的事情:爬蟲,爬哪個網站。

  2、從哪裡開始:爬蟲的入口(啟停配)Spider

  3、接下來便是如何進行爬取和爬取結果的處理。

詳細:

  如何啟動,如何配置,如何停止: 

 

 Spider.create(new Getxgluo())
        .thread(10) //線程,magic是支持多線程的
        .addUrl(t)  //t:要爬取的網站URL
        .addPipeline(new MyPipeline())  //添加一個對爬取結果的處理操作類--輸出到console
        .addPipeline(new MyFilePipeline())  //再添加一個對爬取結果的處理操作類--輸出到文件
        .run();  //爬蟲誕生,去吧皮卡丘,把我想要的拿回來.  

  靚仔,你沒猜錯,create方法是靜態的,所以可以用類名直接調用,run方法就是入口,該方法執行的時候爬蟲就啟動了。

  這些是Spider最常用的配置了,至於騷操作作者就……,大家可以問問度娘,或者直接從 https://github.com/code4craft/webmagic.git獲取項目,直接分析代碼(如果覺著作者陋,歡迎吐槽)。

  啟動了,基本配置有了,我們該設計自己的邏輯了,這個時候我們就要找自己想要爬取的內容在網頁的什麼位置。

  找到網頁查看源代碼找到需要爬取的內容的標簽如:

    

 

  這裡我們有id屬性,那麼我們知道在一個網頁中的id屬性是唯一的,因此我們可以藉助這個屬性,進行匹配

 

  String xpathFB = "[@id=content_left]/div[2]/h3/text()";

   我們利用html提供的xpath便可以根據上面提供的網頁中的位置,找到h3標簽中的內容。

  現在位置找到了,要開始抓數據了,我們上面說到Spider.run的時候爬蟲已經放出去了,剛剛我們有指定了爬蟲的目標,現在要開始採蜜了。

  請你回頭看看我,Spider.create(new Getxgluo())這裡我們創建了一個對象作為參數,但這個類可是作者自己寫的(當然你也可以),但是這個類可是需要實現PageProcess藉口的,而且要重寫process方法,而這個方法就是我們採蜜動作的設計。

  在這裡我們需要對爬的網址進行正則匹配,不然地址都錯了,那還玩個球啊。地址正確就用到網頁中的位置xpathFB了。

 

  html.xpath(xpathFB).toString();

 

  通過Xpath我們就能獲取到了h3中的內容存到字元串中了,那豈不是可以為所欲為了。

  哈哈,只剩一步了,對獲取內容的保存或者輸出。

 

  這個時候拿出最後一把寶劍:Pipeline 來進行後續的操作,比如用於輸出到console中的consoPipeline類和FilePipeline類,當然我們也可以自己重寫Pipeline來創建自己的邏輯。

  如果我們用了Pipeline及其子類,我們還需要new嗎?記住不需要,不需要,不需要,這裡用的回調函數,你需要在實現Pipeline的時候重寫process方法,你寫的邏輯就能被自動調用(真香)。

  好了,現在我們三個步驟都完成了。愉快的試一下吧


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.對數組的遍歷 兩種不同的迴圈都可以對數組進行遍歷,並且通過for迴圈遍歷得到的數據是數值類型的,而通過for in 迴圈遍歷得到的數據則是字元類型的 2.對對象的遍歷 傳統的for迴圈是不能夠遍歷對象的,而通過for in 迴圈則可以,並且通過該迴圈既可以得到屬性的名稱,也可以得到屬性的具體取值 ...
  • 1、全局安裝vue-cli cnpm install --global vue-cli 2、創建一個基於webpack模板的新項目 vue init webpack cyymall (你可以根據實際需求來填寫,反正我一般都這麼設置) 最後一步沒有選擇 npm install,是因為國內用npm太慢了 ...
  • 1.為元素添加四個相同的圓角: 語法結構:border-radius:r; r為圓角的半徑大小 eg:如下樣式,給元素添加四個圓角為10px 代碼如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>radius</title ...
  • 本文作者:位元組跳動數據平臺 早千 這是一張再熟悉不過的地圖,但右上角黑龍江與內蒙古之間的那片飛地是什麼呢? 查一下,摘自互聯網: 大興安嶺是黑龍江省下轄的一個非常特殊的地級行政單位,大興安嶺行政公署和大興安嶺林業集團公司實行政企合一的管理體制。行政公署為省政府派駐機構,所轄加格達奇和松嶺兩區,地權屬 ...
  • 課程目錄: 第一章/web基礎 課時1:常見瀏覽器 課時2:瀏覽器內核 課時3:web標準 第二章/html入門 課時4:html初識 課時5:html骨架 課時6:我的第一個頁面及其標簽簡介 課時7:豬八戒版骨架 課時8:什麼是標簽及其分類 課時9:標簽嵌套和併列關係 課時10:簡單小測試 課時1 ...
  • 1.非同步任務? 我的理解就是需要用戶觸發的事件,定、延時器,簡單理解就是未來才會發生的事件就是非同步事件, 原理:js是一個單線程的語言,中所有的代碼塊都可以按照任務分為兩種任務:一種是同步任務,一種是非同步任務。 js執行程式時遇到這兩種任務,會按照同步和非同步兩種類別進行識別對待。. 1.同步任務進入 ...
  • 文檔地址:https://terryz.gitee.io/selectpage/guide.html ...
  • 每天我們打開電腦,看到各種各樣的Web前端頁面。你知道他們是如何製作的嗎?為了讓頁面更具有規範性,讓使用者更加方便,在製作頁面過程中必須遵循一定的設計流程。在這裡就為大家詳細介紹一下製作一個Web前端頁面的設計流程及註意事項。 一:確定網站主題 每個網站都有自身以及對用戶的定位。針對網站定位確定網站 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...