大學畢業一年收穫仍是滿滿的!手動滑稽html
今天呢,來記錄一個爬蟲項目,用的web-magic實現,不說Java和Python那個更強,只看那個代價更小,與如今我而言天然是Java嘍!同時呢magic也是參考了Scrapy框架的。java
先把git地址掏出來:https://gitee.com/xxxx/magicFetch.git(留言給地址)git
言歸正傳,先說爬蟲須要什麼:github
一、明確要作的事情:爬蟲,爬哪一個網站。web
二、從哪裏開始:爬蟲的入口(啓停配)Spider多線程
三、接下來即是如何進行爬取和爬取結果的處理。框架
詳細:ide
如何啓動,如何配置,如何中止: 函數
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方法,你寫的邏輯就能被自動調用(真香)。
好了,如今咱們三個步驟都完成了。愉快的試一下吧