Hawk教程- 常見問題

常見問題

1.網(wǎng)頁采集器

1.1.自動(dòng)嗅探失敗

網(wǎng)頁采集器具備自動(dòng)嗅探功能驰贷,本質(zhì)上是替換掉了底層的代理乾蓬。因此崎岂,所有的請求都通過Hawk內(nèi)部瘫辩,自然就能根據(jù)需求篩選出所需的請求。

1.2.被封鎖問題

被封鎖有幾個(gè)原因:

被網(wǎng)站識別為非瀏覽器

出現(xiàn)這種情況的原因是請求參數(shù)為空府喳,沒有模擬為瀏覽器(user-agent)针姿,如大眾點(diǎn)評只防此類爬蟲。

最新改進(jìn)的版本中相恃,Hawk默認(rèn)請求參數(shù)已經(jīng)加入了user-agent,因此能解決掉一大部分初級問題辜纲。

頻繁訪問

這取決于網(wǎng)站如何認(rèn)定是同一個(gè)使用者。

  • 有的網(wǎng)站認(rèn)為同一臺機(jī)器的不同瀏覽器也是不同的用戶拦耐。
  • 有的網(wǎng)站認(rèn)為只要IP相同耕腾,則使用者一定相同

對前一種情況,可以隨機(jī)在一大批User-agent列表中挑選一條杀糯,模擬為不同的瀏覽器扫俺,就能大大降低被PB的概率。典型的例子如豆瓣固翰。

對后一種情況狼纬,很不幸需要使用真正的代理,或使用分布式方案骂际。免費(fèi)代理通常都不穩(wěn)定疗琉,而付費(fèi)代理則需要付費(fèi),很少有人愿意為了爬蟲付錢(一臉黑線)歉铝。

因此盈简,Hawk會(huì)考慮提供第一種情況的解決方案,但不會(huì)自動(dòng)開啟太示,而是在用戶需要的時(shí)候手工開啟送火。

而自動(dòng)代理切換,目前Hawk不會(huì)提供支持先匪。原因更多考慮的是技術(shù)之外的因素种吸。

1.3.抓取動(dòng)態(tài)請求

這是被問的最多的問題。加載一個(gè)完整的網(wǎng)頁呀非,可能需要幾十次請求坚俗,不少請求是ajax和動(dòng)態(tài)的,而不少數(shù)據(jù)都保存在這些請求之中岸裙。

最早版本的Hawk內(nèi)置了一個(gè)IE內(nèi)核的瀏覽器猖败,后來取消了這個(gè)功能。原因很簡單:

  • 內(nèi)置瀏覽器降允,導(dǎo)致過分復(fù)雜
  • 無法多線程抓取
  • 大量無用的請求恩闻,導(dǎo)致抓取速度變慢
  • 即使內(nèi)置瀏覽器,也不見得能抓取所有動(dòng)態(tài)請求

因此剧董,純HttpClient能夠精確并只抓取你想要的內(nèi)容幢尚,只要正確構(gòu)造它即可破停。
如何使用?你需要配置一個(gè)網(wǎng)頁采集器尉剩。
將它的行為真慢,模擬到和瀏覽器一致。

第一種方法理茎,查看瀏覽器的請求黑界,參考 ,將Http請求詳情復(fù)制過來皂林,注意選擇GET和POST朗鸠。

之后,將嗅探到的地址拷貝到網(wǎng)頁采集器的URL輸入框中础倍,查看是否能正確獲取內(nèi)容烛占。
如果是POST請求,就更復(fù)雜一些著隆。在數(shù)據(jù)清洗模塊中扰楼,網(wǎng)頁采集器拖入的列需要是對應(yīng)的URL,你還需要構(gòu)造出每次訪問的post數(shù)據(jù)美浦,單獨(dú)作為一列弦赖。在網(wǎng)頁采集器中如下配置:

注意列名需要用方括號括起來,否則每次POST數(shù)據(jù)都會(huì)是所填的數(shù)據(jù)浦辨。

1.4.驗(yàn)證碼問題

這也是問的非常多的問題蹬竖,很不幸,不支持流酬。驗(yàn)證碼各種各樣币厕,簡單到純數(shù)字,復(fù)雜到12306芽腾,圖像轉(zhuǎn)文本涉及到太多的不確定因素旦装。

解決方案也有,一些網(wǎng)站提供識別驗(yàn)證碼的接口API摊滔,因此你可以讓Hawk去模擬網(wǎng)站的API阴绢,將圖片地址傳遞過去,API會(huì)自動(dòng)返回驗(yàn)證碼艰躺。壞消息是這個(gè)一般需要收費(fèi)呻袭。
不過,能配置Hawk去做這樣的請求的人腺兴,一定也能夠?qū)慞ython了左电,算了,他還是去寫Python吧,別跳Hawk這個(gè)坑了篓足。

1.5.Path搜索相關(guān)問題

網(wǎng)頁采集器中段誊,填寫關(guān)鍵字,卻發(fā)現(xiàn)無法找到XPath纷纫。
可能的原因:

網(wǎng)頁是動(dòng)態(tài)網(wǎng)頁

因此本鏈接不包含該關(guān)鍵字枕扫,建議考慮使用嗅探方案

關(guān)鍵字太長

是文本中包含不可見字符時(shí)經(jīng)常出現(xiàn)陪腌。例如 340[制表符]萬辱魁,但用戶可能會(huì)直接輸入340萬。Hawk搜索是按照嚴(yán)格字符串匹配的诗鸭,就會(huì)匹配不成功染簇,因此輸入短一些,如340

和 Chrome等瀏覽器得到的XPath不同

一方面强岸,XPath的表示方法有很多種锻弓,這和正則類似◎蚬浚可能看起來不一樣的XPath指代的都是同一個(gè)節(jié)點(diǎn)青灼。
另一方面,Chrome會(huì)執(zhí)行js代碼妓盲,而js可能會(huì)改變網(wǎng)頁的結(jié)構(gòu)杂拨,因此XPath也就對應(yīng)地發(fā)生變化了。這會(huì)通常會(huì)導(dǎo)致從Chrome拷貝出來的XPath在Hawk中不能使用悯衬。
Hawk未來不會(huì)考慮支持加入執(zhí)行js代碼的功能弹沽,因此,如果搜索XPath筋粗,還請以Hawk得到的結(jié)果為準(zhǔn)策橘。多搜多看,通常就能建立感覺娜亿。

1.6.手氣不錯(cuò)的問題

很多人使用手氣不錯(cuò)會(huì)失敗丽已。這是因?yàn)椋?/p>

不是所有的網(wǎng)頁都支持直接點(diǎn)擊【手氣不錯(cuò)】

手氣不錯(cuò)需要特定的網(wǎng)頁結(jié)構(gòu)(列表),如果整個(gè)網(wǎng)頁沒有顯著的列表節(jié)點(diǎn)买决,則搜索失敗沛婴,此時(shí)就會(huì)提示 手氣不錯(cuò)失敗。

手氣不錯(cuò)會(huì)自動(dòng)規(guī)約父節(jié)點(diǎn)

使用手氣不錯(cuò)后策州,嗅探器會(huì)找到列表節(jié)點(diǎn)的父節(jié)點(diǎn)瘸味,以及掛載在父節(jié)點(diǎn)上的多個(gè)子節(jié)點(diǎn),從而形成一個(gè)樹狀結(jié)構(gòu):

  • 父節(jié)點(diǎn)(/html/div[2]/div[3]/div[4])
  • 子節(jié)點(diǎn)1(/a[1])
  • 子節(jié)點(diǎn)2(/a[2]/@href)
  • 其他省略 有時(shí)候够挂,父節(jié)點(diǎn)的xpath是不穩(wěn)定的旁仿,舉個(gè)例子,北京上海的二手房頁面,上海會(huì)在列表上面增加一個(gè)廣告banner枯冈,從而真正的父節(jié)點(diǎn)就會(huì)發(fā)生變化毅贮。為了應(yīng)對這種變化,通常的做法是手工修改【父節(jié)點(diǎn)XPath】尘奏,繼續(xù)舉例子滩褥,父節(jié)點(diǎn)的id為house_list,且在網(wǎng)頁中全局唯一炫加,你就可以使用另外一種父節(jié)點(diǎn)表示法//*[@id='house_list'](寫法可以參考其他XPath教程)瑰煎,而子節(jié)點(diǎn)表達(dá)式不變。
    Hawk在【手氣不錯(cuò)】得到【確定】后俗孝,會(huì)詢問是否提取父節(jié)點(diǎn)XPath酒甸,此時(shí)Hawk會(huì)自動(dòng)提取【父節(jié)點(diǎn)XPath】到屬性對話框中,從而方便修改赋铝。

1.7.獲得的頁面與瀏覽器上不一樣插勤?

這非常常見,考慮到速度革骨,Hawk不會(huì)動(dòng)態(tài)執(zhí)行js請求农尖。而瀏覽器會(huì)大量執(zhí)行js加載圖片等,獲得的源碼可能有所不同良哲,更不用說搜索得到的XPath了盛卡。但這樣能獲得百倍于瀏覽器的執(zhí)行速度,因此這個(gè)缺點(diǎn)是值得的臂外。

那如何抓取動(dòng)態(tài)頁面呢窟扑?對于這種情況,參考動(dòng)態(tài)嗅探章節(jié)漏健。

即使是同樣的頁面嚎货,用Hawk得到的XPATH與瀏覽器不一致,為什么呢蔫浆?

一方面殖属,XPath的表示方法有很多種,這和正則類似瓦盛∠聪裕可能看起來不一樣的XPath指代的都是同一個(gè)節(jié)點(diǎn)。另一方面原环,Chrome會(huì)執(zhí)行js代碼挠唆,而js可能會(huì)改變網(wǎng)頁的結(jié)構(gòu),因此XPath也就對應(yīng)地發(fā)生變化了嘱吗。這有可能會(huì)導(dǎo)致從Chrome拷貝出來的XPath在Hawk中不能使用玄组。

Hawk未來不會(huì)考慮支持加入執(zhí)行js代碼的功能,因此,如果搜索XPath俄讹,還請以Hawk得到的結(jié)果為準(zhǔn)哆致。多搜多看,通常就能建立感覺患膛。

1.8.一個(gè)網(wǎng)站要設(shè)置好多個(gè)頁面摊阀,配置太繁瑣!

可在系統(tǒng)狀態(tài)視圖中踪蹬,將網(wǎng)頁采集器拖到下面的復(fù)制圖標(biāo)上胞此,即可復(fù)制多個(gè)采集器。這樣可一定程度上簡化操作延曙。

當(dāng)一組采集器需要同一組請求參數(shù)時(shí)豌鹤,可設(shè)置共享源自動(dòng)同步亡哄,參考3.2采集器高級用法的最后一節(jié)枝缔。

2.數(shù)據(jù)清洗

2.1.拖入從爬蟲轉(zhuǎn)換后沒有任何數(shù)據(jù)。

從爬蟲轉(zhuǎn)換實(shí)際上搭建了采集器與數(shù)據(jù)清洗的橋梁蚊惯,它要選擇對應(yīng)的網(wǎng)頁采集器才行愿卸,

2.2.拖入從爬蟲轉(zhuǎn)換后,數(shù)據(jù)有了截型,但之前的列消失了

參考 4.3轉(zhuǎn)換器UDAF的特別說明.

3.編譯與運(yùn)行問題

雖然在GitHub上是最新的代碼趴荸,最新代碼是可以成功編譯的。但不能保證用戶是否clone的是早期版本的代碼宦焦,因此此處羅列可能的編譯錯(cuò)誤发钝。

3.1.編譯問題

  1. 從GitHub上拉回來的代碼,默認(rèn)啟動(dòng)路徑是Hawk.Core波闹,這導(dǎo)致編譯成功酝豪,但運(yùn)行時(shí)提示“無法直接啟動(dòng)帶有類庫輸出類型的項(xiàng)目”: 將Hawk設(shè)置為解決方案的啟動(dòng)項(xiàng)目,參考這里:https://jingyan.baidu.com/article/4e5b3e1934c2fc91901e2426.html
  1. 因?yàn)楣こ?code>Hawk.csproj包含的兩個(gè)圖片文件不存在導(dǎo)致精堕,在這些文件圖標(biāo)上點(diǎn)擊右鍵孵淘,選擇'排除出項(xiàng)目',即可正常編譯歹篓。

  2. 找不到項(xiàng)目System.Windows.???.WPFPropertyGrid.csproj項(xiàng)目瘫证,有兩種方法,一種是從作者的GitHub上clone對應(yīng)的項(xiàng)目庄撮,并添加項(xiàng)目引用背捌,另外一種做法是,刪除項(xiàng)目引用洞斯,添加外部dll引用毡庆,所有的外部dll,都能在Include文件夾中找到。

  3. 大量的庫找不到扭仁,幾百個(gè)報(bào)錯(cuò):

Hawk編譯用了不少第三方類庫垮衷,因此需要配置nuget,它是微軟技術(shù)棧的pip乖坠,能自動(dòng)安裝所需的依賴搀突,配置可參考這里:

https://docs.nuget.org/

3.2.啟動(dòng)后軟件只有外邊框,沒有其他任何顯示

老版本的Hawk(小于1.2)在Win7和Win8下的兼容性不佳熊泵,請升級最新版本的Hawk.

3.3.不小心關(guān)掉了某個(gè)側(cè)邊欄

Hawk采用了Visual Stuido風(fēng)格的Dock系統(tǒng)仰迁,所有的布局都可以調(diào)節(jié)大小,設(shè)定位置顽分,常見的錯(cuò)誤是徐许,不小心關(guān)閉了某個(gè)面板。如何恢復(fù)呢卒蘸? 對于任務(wù)的窗口雌隅,雙擊任務(wù)應(yīng)該就能恢復(fù),如果是日志邊欄缸沃,不好意思恰起,恢復(fù)不了,重啟軟件吧趾牧。

4.宏觀問題

和具體使用無關(guān)检盼,主要涉及對一些吐槽的回答

4.1.為什么只支持Windows?

筆者曾是微軟技術(shù)棧的粉絲翘单,因此C#,WPF成了設(shè)計(jì)首選吨枉,如今雖然技術(shù)棧大大擴(kuò)展,但用Js或其他語言重寫成本太高哄芜,因此依然只提供Windows版本貌亭。 雖然筆者平時(shí)也只用MAC了...

4.2.為什么不提供更強(qiáng)的代理?

爬蟲是一種灰色的應(yīng)用忠烛,雖然作為Hawk的設(shè)計(jì)者属提,但我依然不得不這么說。

各大網(wǎng)站都在收集和整理數(shù)據(jù)上花費(fèi)了大量的精力美尸,因此抓取的數(shù)據(jù)應(yīng)當(dāng)僅僅作為科學(xué)研究使用冤议。作者對Hawk的使用者的行為,不承擔(dān)任何連帶責(zé)任师坎。

建議您理性使用爬蟲恕酸,在不影響網(wǎng)站正常運(yùn)營的情況下抓取數(shù)據(jù)。Hawk的好處是胯陋,較大地降低了爬蟲的開發(fā)成本蕊温,能讓普通用戶也能使用袱箱。在這一理念下,我們僅僅提供最為實(shí)用的功能义矛,而更多高級的功能則不會(huì)提供发笔。比如代理切換和驗(yàn)證碼識別。

在并行模式下凉翻,僅提供單機(jī)并行了讨,而分布式并行也不會(huì)提供。盡管如此制轰,我們還是會(huì)簡單討論如何驗(yàn)證碼識別,代理和并行的問題前计。

代理實(shí)現(xiàn)并不復(fù)雜,在代碼層面上只需要幾行代碼垃杖。但基于之前提過的原因男杈,開源版本不提供代理的支持。

4.3.驗(yàn)證碼識別调俘?

驗(yàn)證碼識別確實(shí)有難度伶棒,因?yàn)楦鞔缶W(wǎng)站都不相同,簡單的如普通四位數(shù)字驗(yàn)證碼脉漏,難的如12306的變態(tài)驗(yàn)證碼苞冯。因此提供通用的識別幾乎是不可能的。

如果您愿意付費(fèi)侧巨,并使用第三方的圖形驗(yàn)證碼服務(wù),則可以將其配置為一個(gè)網(wǎng)頁采集器鞭达,再調(diào)用之司忱。

4.4.為什么只支持MongoDB和Sqlite?

Hawk在設(shè)計(jì)之初,就是以弱schema風(fēng)格定義的畴蹭。沒有嚴(yán)格的列名和列屬性坦仍。用C#這樣的靜態(tài)強(qiáng)類型語言編寫Hawk,其實(shí)并不方便叨襟。但弱schema讓Hawk變得更靈活更強(qiáng)大繁扎。

因此,Hawk雖然之前支持各種數(shù)據(jù)庫連接器糊闽,而目前只支持MongoDB這樣的文檔型數(shù)據(jù)庫梳玫。之所以不支持傳統(tǒng)SQL,是因?yàn)楂@取的數(shù)據(jù)可能并不滿足這些SQL數(shù)據(jù)庫的約束:如列的順序右犹,列的字段類型提澎,是否為空...很容易導(dǎo)致插入失敗。使用Hawk的一般不是程序員念链,我不想給普通人挖這樣的坑盼忌。

當(dāng)然积糯,從各類SQL數(shù)據(jù)庫中讀入數(shù)據(jù)也是可以的,但既然沒有提供寫入谦纱,我們也就索性不提供讀入了嘉栓。需要的話,你可以自己擴(kuò)展其他數(shù)據(jù)庫連接器究履。

不過唯绍,簡單的才是最好的,以作者的經(jīng)驗(yàn)偿荷,使用MongoDB這樣的數(shù)據(jù)庫來應(yīng)對爬蟲已經(jīng)足夠了:不需事先建表窘游,高性能,低成本跳纳,低維護(hù)忍饰。我們也不可能一次性就把數(shù)據(jù)規(guī)約成你想要的形式,之后完全可以用其他工具和代碼寺庄,再將MongoDB的數(shù)據(jù)導(dǎo)出來艾蓝,寫入到目標(biāo)數(shù)據(jù)庫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斗塘,一起剝皮案震驚了整個(gè)濱河市赢织,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馍盟,老刑警劉巖于置,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贞岭,居然都是意外死亡八毯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門瞄桨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來话速,“玉大人,你說我怎么就攤上這事芯侥〔唇唬” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵柱查,是天一觀的道長廓俭。 經(jīng)常有香客問我,道長物赶,這世上最難降的妖魔是什么白指? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮酵紫,結(jié)果婚禮上告嘲,老公的妹妹穿的比我還像新娘错维。我一直安慰自己,他們只是感情好橄唬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布赋焕。 她就那樣靜靜地躺著,像睡著了一般仰楚。 火紅的嫁衣襯著肌膚如雪隆判。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天僧界,我揣著相機(jī)與錄音侨嘀,去河邊找鬼。 笑死捂襟,一個(gè)胖子當(dāng)著我的面吹牛咬腕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葬荷,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涨共,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宠漩?” 一聲冷哼從身側(cè)響起举反,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扒吁,沒想到半個(gè)月后火鼻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘦陈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年凝危,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晨逝。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖懦铺,靈堂內(nèi)的尸體忽然破棺而出捉貌,到底是詐尸還是另有隱情,我是刑警寧澤冬念,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布趁窃,位于F島的核電站,受9級特大地震影響急前,放射性物質(zhì)發(fā)生泄漏醒陆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一裆针、第九天 我趴在偏房一處隱蔽的房頂上張望刨摩。 院中可真熱鬧寺晌,春花似錦、人聲如沸澡刹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罢浇。三九已至陆赋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚷闭,已是汗流浹背攒岛。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胞锰,地道東北人灾锯。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像胜蛉,于是被迫代替她去往敵國和親挠进。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 上網(wǎng)原理 1誊册、爬蟲概念 爬蟲是什麼领突? 蜘蛛,蛆案怯,代碼中君旦,就是寫了一段代碼,代碼的功能從互聯(lián)網(wǎng)中提取數(shù)據(jù) 互聯(lián)網(wǎng): ...
    riverstation閱讀 8,050評論 1 2
  • HTTP基本原理 URI嘲碱、URL金砍、URN(Uninform Resource) URI(Identifier):統(tǒng)...
    GHope閱讀 2,076評論 2 26
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)麦锯。 注意:講述HT...
    kismetajun閱讀 27,474評論 1 45
  • 爬蟲概述 1. 目錄清單 爬蟲簡介 通用爬蟲和聚焦爬蟲 網(wǎng)絡(luò)請求那些事兒 網(wǎng)絡(luò)數(shù)據(jù)抓包分析 2. 章節(jié)內(nèi)容 2.1...
    小皇帝s閱讀 688評論 0 1
  • 今天是什么日子 任務(wù)清單 周目標(biāo)·完成進(jìn)度 學(xué)習(xí)·信息·閱讀 健康·飲食·鍛煉 人際·家人·朋友 今晚恕稠,同事們狠狠...
    朋友zcl閱讀 179評論 0 2