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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...