欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 網(wǎng)絡(luò)爬蟲(chóng)基礎(chǔ)知識(shí)入門(mén)解析

 更新時(shí)間:2019年10月10日 09:22:02   作者:平頭哥的技術(shù)博文  
這篇文章主要介紹了Java 網(wǎng)絡(luò)爬蟲(chóng)基礎(chǔ)知識(shí)入門(mén)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

說(shuō)起網(wǎng)絡(luò)爬蟲(chóng),大家想起的估計(jì)都是 Python ,誠(chéng)然爬蟲(chóng)已經(jīng)是 Python 的代名詞之一,相比 Java 來(lái)說(shuō)就要遜色不少。有不少人都不知道 Java 可以做網(wǎng)絡(luò)爬蟲(chóng),其實(shí) Java 也能做網(wǎng)絡(luò)爬蟲(chóng)而且還能做的非常好,在開(kāi)源社區(qū)中有不少優(yōu)秀的 Java 網(wǎng)絡(luò)爬蟲(chóng)框架,例如 webmagic 。我的第一份正式工作就是使用 webmagic 編寫(xiě)數(shù)據(jù)采集程序,當(dāng)時(shí)參與了一個(gè)輿情分析系統(tǒng)的開(kāi)發(fā),這里面涉及到了大量網(wǎng)站的新聞采集,我們就使用了 webmagic 進(jìn)行采集程序的編寫(xiě),由于當(dāng)時(shí)不知道其設(shè)計(jì)原理,使用起來(lái)還是走了不少?gòu)澛罚鋵?shí) webmagic 的設(shè)計(jì)借鑒了 Scrapy ,所以它也能像 Scrapy 一樣強(qiáng)大,關(guān)于 webmagic 框架我們將在后續(xù)展開(kāi)詳細(xì)的討論。

在后面的幾年工作中,也參與了好幾個(gè)爬蟲(chóng)項(xiàng)目,但是大多數(shù)都是使用 Python ,拋開(kāi)語(yǔ)言不談,爬蟲(chóng)也是有一套思想的。這些年寫(xiě)爬蟲(chóng)程序,對(duì)我個(gè)人的技術(shù)成長(zhǎng)幫助非常大,因?yàn)樵谂老x(chóng)的過(guò)程中,會(huì)遇到各種各樣的問(wèn)題,其實(shí)做網(wǎng)絡(luò)爬蟲(chóng)還是非常考驗(yàn)技術(shù)的,除了保證自己的采集程序可用之外,還會(huì)遇到被爬網(wǎng)站各種奇奇怪怪的問(wèn)題,比如整個(gè) HTML 頁(yè)面有沒(méi)一個(gè) class 或者 id 屬性,你要在這種頁(yè)面提取表格數(shù)據(jù),并且做到優(yōu)雅的提取,這就是非常考驗(yàn)?zāi)愕南胂罅σ约凹夹g(shù)啦。非常有幸在剛?cè)胄械臅r(shí)候就接觸到了網(wǎng)絡(luò)爬蟲(chóng)這一塊,它加快了我對(duì)互聯(lián)網(wǎng)的理解和認(rèn)知,擴(kuò)寬了我的視野。

這幾年來(lái)網(wǎng)絡(luò)爬蟲(chóng)比較火,如果你想學(xué)習(xí) Java 網(wǎng)絡(luò)爬蟲(chóng),我根據(jù)我自己的經(jīng)驗(yàn)總結(jié)了一下,想入門(mén)學(xué)習(xí) Java 網(wǎng)絡(luò)爬蟲(chóng)需要知道的四點(diǎn)基礎(chǔ)知識(shí)。

1、有 “道德” 的爬蟲(chóng)

我為什么會(huì)把這一點(diǎn)放在最前面呢?因?yàn)槲矣X(jué)得這一點(diǎn)比較重要,什么叫有 “道德” 的爬蟲(chóng)呢?就是遵循被爬服務(wù)器的規(guī)則,不去影響被爬服務(wù)器的正常運(yùn)行,不把被爬服務(wù)搞垮,這就是有 “道德” 的爬蟲(chóng)。

經(jīng)常有人討論的一個(gè)問(wèn)題就是爬蟲(chóng)合法嗎?知乎一下你看到的將是這樣的

答案千千萬(wàn),在這眾多答案中,我個(gè)人比較贊同下面的這個(gè)回答

爬蟲(chóng)作為一種計(jì)算機(jī)技術(shù)就決定了它的中立性,因此爬蟲(chóng)本身在法律上并不被禁止,但是利用爬蟲(chóng)技術(shù)獲取數(shù)據(jù)這一行為是具有違法甚至是犯罪的風(fēng)險(xiǎn)的。所謂具體問(wèn)題具體分析,正如水果刀本身在法律上并不被禁止使用,但是用來(lái)捅人,就不被法律所容忍了。

爬蟲(chóng)為不違法?取決于你做的事情為不違法,網(wǎng)絡(luò)爬蟲(chóng)的本質(zhì)是什么?網(wǎng)絡(luò)爬蟲(chóng)的本質(zhì)是用機(jī)器代替人工去訪問(wèn)頁(yè)面。我查看公開(kāi)的新聞肯定不犯法,所以我去采集公開(kāi)在互聯(lián)網(wǎng)上的新聞也不犯法,就像各大搜索引擎網(wǎng)站一樣,別的網(wǎng)站巴不得別搜索引擎的蜘蛛抓取到。另一種恰恰相反的情況是去采集別人隱私的數(shù)據(jù),你自己去查看別人的隱私信息這就是一種違法的行為,所以用程序去采集也是違法的,這就像答案中所說(shuō)的水果刀本身不違法,但是用來(lái)捅人就違法啦。

要做到有 “道德” 的爬蟲(chóng),Robots 協(xié)議是你必須需要了解的,下面是Robots 協(xié)議的百度百科

在很多網(wǎng)站中會(huì)申明 Robots 協(xié)議告訴你哪些頁(yè)面是可以抓取的,哪些頁(yè)面是不能抓取的,當(dāng)然 Robots 協(xié)議只是一種約定,就像公交車上的座位一樣標(biāo)明著老弱病殘專座,你去坐了也不違法。

除了協(xié)議之外,我們的采集行為上也需要克制,在 『數(shù)據(jù)安全管理辦法(征求意見(jiàn)稿)』的第二章第十六條指出:

網(wǎng)絡(luò)運(yùn)營(yíng)者采取自動(dòng)化手段訪問(wèn)收集網(wǎng)站數(shù)據(jù),不得妨礙網(wǎng)站正常運(yùn)行;此類行為嚴(yán)重影響網(wǎng)站運(yùn)行,如自動(dòng)化訪問(wèn)收集流量超過(guò)網(wǎng)站日均流量三分之一,網(wǎng)站要求停止自動(dòng)化訪問(wèn)收集時(shí),應(yīng)當(dāng)停止。

這條規(guī)定指出了爬蟲(chóng)程序不得妨礙網(wǎng)站正常運(yùn)行,如果你使用爬蟲(chóng)程序把網(wǎng)站搞垮了,真正的訪問(wèn)者就不能訪問(wèn)該網(wǎng)站了,這是一種非常不道德的行為。應(yīng)該杜絕這種行為。

除了數(shù)據(jù)的采集,在數(shù)據(jù)的使用上同樣需要注意,我們即使在得到授權(quán)的情況下采集了個(gè)人信息數(shù)據(jù),也千萬(wàn)不要去出賣(mài)個(gè)人數(shù)據(jù),這個(gè)是法律特別指出禁止的,參見(jiàn):

根據(jù)《最高人民法院 最高人民檢察院關(guān)于辦理侵犯公民個(gè)人信息刑事案件適用法律若干問(wèn)題的解釋》第五條規(guī)定,對(duì)“情節(jié)嚴(yán)重”的解釋:

(1)非法獲取、出售或者提供行蹤軌跡信息、通信內(nèi)容、征信信息、財(cái)產(chǎn)信息五十條以上的;

(2)非法獲取、出售或者提供住宿信息、通信記錄、健康生理信息、交易信息等其他可能影響人身、財(cái)產(chǎn)安全的公民個(gè)人信息五百條以上的;

(3)非法獲取、出售或者提供第三項(xiàng)、第四項(xiàng)規(guī)定以外的公民個(gè)人信息五千條以上的便構(gòu)成“侵犯公民個(gè)人信息罪”所要求的“情節(jié)嚴(yán)重”。

此外,未經(jīng)被收集者同意,即使是將合法收集的公民個(gè)人信息向他人提供的,也屬于刑法第二百五十三條之一規(guī)定的“提供公民個(gè)人信息”,可能構(gòu)成犯罪。

2、學(xué)會(huì)分析 Http 請(qǐng)求

我們每一次與服務(wù)端的交互都是通過(guò) Http 協(xié)議,當(dāng)然也有不是 Http 協(xié)議的,這個(gè)能不能采集我就不知道啦,沒(méi)有采集過(guò),所以我們只談?wù)?Http 協(xié)議,在 Web 網(wǎng)頁(yè)中分析 Http 協(xié)議還是比較簡(jiǎn)單,我們以百度檢索一條新聞為例

我們打開(kāi) F12 調(diào)試工具,點(diǎn)擊 NetWork 查看版能查看到所有的請(qǐng)求,找到我們地址欄中的鏈接,主鏈接一般存在 NetWork 最上面一條鏈接

在右邊headers查看欄中,我們能夠看到這次請(qǐng)求所需要的參數(shù),在這里我們需要特別注意 Request Headers 和 Query String Parameters 這兩個(gè)選項(xiàng)欄。

Request Headers 表示的是該次 Http 請(qǐng)求所需要的請(qǐng)求頭的參數(shù),有一些網(wǎng)站會(huì)根據(jù)請(qǐng)求頭來(lái)屏蔽爬蟲(chóng),所以里面的參數(shù)還是需要了解一下的,請(qǐng)求頭參數(shù)中大部分參數(shù)都是公用的, User-Agent 和 Cookie 這兩個(gè)參數(shù)使用比較頻繁, User-Agent 標(biāo)識(shí)瀏覽器請(qǐng)求頭,Cookie 存放的是用戶登錄憑證。

Query String Parameters 表示該次 Http 請(qǐng)求的請(qǐng)求參數(shù),對(duì)于post 請(qǐng)求來(lái)說(shuō)這個(gè)還是非常重要的,因?yàn)樵谶@里可以查看到請(qǐng)求參數(shù),對(duì)我們模擬登陸等 Post 請(qǐng)求非常有用。

上面是網(wǎng)頁(yè)版的 HTTP 請(qǐng)求的鏈接分析,如果需要采集 APP 里面的數(shù)據(jù)就需要借助模擬器了,因?yàn)?APP 里沒(méi)有調(diào)試工具,所以只能借助模擬器,使用較多的模擬器工具有如下兩種,有興趣的可以執(zhí)行研究。

  • fiddler
  • wireshark

3、學(xué)會(huì) HTML 頁(yè)面解析

我們采集的頁(yè)面都是 HTML 頁(yè)面,我們需要在 HTML 頁(yè)面中獲取我們需要的信息,這里面就涉及到了 HTML 頁(yè)面解析,也就是 DOM 節(jié)點(diǎn)解析,這一點(diǎn)是重中之重,如果你不會(huì)這一點(diǎn)就像魔術(shù)師沒(méi)有道具一樣,只能干瞪眼啦。例如下面這個(gè) HTML 頁(yè)面

我們需要獲取標(biāo)題 “java user-agent 判斷是否電腦訪問(wèn)” ,我們先通過(guò) F12 檢查元素

標(biāo)題所在的 span 標(biāo)簽我已經(jīng)在圖中框出來(lái)啦,我們?cè)撊绾谓馕鲞@個(gè)節(jié)點(diǎn)信息呢?方法有千千萬(wàn)萬(wàn),經(jīng)常使用的選擇器應(yīng)該是 CSS 選擇器 和 XPath ,如果你還不知道這兩種選擇器,可以點(diǎn)擊下方鏈接學(xué)習(xí)了解一下:

CSS 選擇器參考手冊(cè):https://www.w3school.com.cn/cssref/css_selectors.asp

XPath 教程:https://www.w3school.com.cn/xpath/xpath_syntax.asp

使用 CSS 選擇器解析的寫(xiě)法為: #wgt-ask > h1 > span

使用 XPath 解析的寫(xiě)法為: //span[@class="wgt-ask"]

這樣就獲取到了 span 的節(jié)點(diǎn),值需要取出 text 就好了,對(duì)于 CSS 選擇器 和 XPath 除了自己編寫(xiě)之外,我們還可以借助瀏覽器來(lái)幫我們完成,例如 chrome 瀏覽器

只需要選中對(duì)應(yīng)的節(jié)點(diǎn),右鍵找到 Copy ,它提供了幾種獲取該節(jié)點(diǎn)的解析方式,具體的入上圖所示,Copy selector 對(duì)應(yīng)的就是 Css 選擇器,Copy XPath 對(duì)應(yīng)的是 XPath,這個(gè)功能還是非常有用的。

4、了解反爬蟲(chóng)策略

因?yàn)楝F(xiàn)在爬蟲(chóng)非常泛濫,很多網(wǎng)站都會(huì)有反爬蟲(chóng)機(jī)制,來(lái)過(guò)濾掉爬蟲(chóng)程序,以便保證網(wǎng)站的可以用,這也是非常有必要的手段,畢竟如果網(wǎng)站不能使用了,就沒(méi)有利益可談啦。反爬蟲(chóng)的手段非常多,我們來(lái)看看幾種常見(jiàn)的反爬蟲(chóng)手段。

基于 Headers 的反爬蟲(chóng)機(jī)制

這是一種比較常見(jiàn)的反爬蟲(chóng)機(jī)制,網(wǎng)站通過(guò)檢查 Request Headers 中的 User-Agent 、Referer 參數(shù),來(lái)判斷該程序是不是爬蟲(chóng)程序。要繞過(guò)這種機(jī)制就比較簡(jiǎn)單,我們只需要在網(wǎng)頁(yè)中先查看該網(wǎng)站所需要的 User-Agent 、Referer 參數(shù)的值,然后在爬蟲(chóng)程序的 Request Headers 設(shè)置好這些參數(shù)就好啦。

基于用戶行為的反爬蟲(chóng)機(jī)制

這也是一種常見(jiàn)的反爬蟲(chóng)機(jī)制,最常用的就是 IP 訪問(wèn)限制,一個(gè) IP 在一段時(shí)間內(nèi)只被允許訪問(wèn)多少次,如果超過(guò)這個(gè)頻次的話就會(huì)被認(rèn)為是爬蟲(chóng)程序,比如豆瓣電影就會(huì)通過(guò) IP 限制。

對(duì)于這種機(jī)制的話,我們可以通過(guò)設(shè)置代理 IP 來(lái)解決這個(gè)問(wèn)題,我們只需要從代理ip網(wǎng)站上獲取一批代理ip,在請(qǐng)求的時(shí)候通過(guò)設(shè)置代理 IP 即可。

除了 IP 限制之外,還會(huì)有基于你每次的訪問(wèn)時(shí)間間隔,如果你每次訪問(wèn)的時(shí)間間隔都是固定的,也可能會(huì)被認(rèn)為是爬蟲(chóng)程序。要繞過(guò)這個(gè)限制就是在請(qǐng)求的時(shí)候,時(shí)間間隔設(shè)置不一樣,比例這次休眠 1 分鐘,下次 30 秒。

基于動(dòng)態(tài)頁(yè)面的反爬蟲(chóng)機(jī)制

有很多網(wǎng)站,我們需要采集的數(shù)據(jù)是通過(guò) Ajax 請(qǐng)求的或者通過(guò) JavaScript生成的,對(duì)于這種網(wǎng)站是比較蛋疼的,繞過(guò)這種機(jī)制,我們有兩種辦法,一種是借助輔助工具,例如 Selenium 等工具獲取渲染完成的頁(yè)面。第二種方式就是反向思維法,我們通過(guò)獲取到請(qǐng)求數(shù)據(jù)的 AJAX 鏈接,直接訪問(wèn)該鏈接獲取數(shù)據(jù)。

以上就是爬蟲(chóng)的一些基本知識(shí),主要介紹了網(wǎng)絡(luò)爬蟲(chóng)的使用工具和反爬蟲(chóng)策略,這些東西在后續(xù)對(duì)我們的爬蟲(chóng)學(xué)習(xí)會(huì)有所幫助。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Cloud 負(fù)載均衡器 Ribbon原理及實(shí)現(xiàn)

    Spring Cloud 負(fù)載均衡器 Ribbon原理及實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud 負(fù)載均衡器 Ribbon原理及實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Java?超詳細(xì)講解類的定義方式和對(duì)象的實(shí)例化

    Java?超詳細(xì)講解類的定義方式和對(duì)象的實(shí)例化

    Java是一門(mén)純面向?qū)ο蟮恼Z(yǔ)言(Object?Oriented?Program,繼承OOP),在面對(duì)對(duì)象的世界里面,一切皆為對(duì)象。面向?qū)ο笫墙鉀Q問(wèn)題的一種思想,主要依靠對(duì)象之間的交互完成一件事情
    2022-03-03
  • SpringBoot可以同時(shí)處理多少請(qǐng)求流程分析

    SpringBoot可以同時(shí)處理多少請(qǐng)求流程分析

    SpringBoot默認(rèn)的內(nèi)嵌容器是Tomcat,也就是我們的程序?qū)嶋H上是運(yùn)行在Tomcat里的,所以與其說(shuō)SpringBoot可以處理多少請(qǐng)求,到不如說(shuō)Tomcat可以處理多少請(qǐng)求,這篇文章主要介紹了SpringBoot可以同時(shí)處理多少請(qǐng)求,需要的朋友可以參考下
    2023-02-02
  • Java開(kāi)發(fā)者推薦的10種常用工具

    Java開(kāi)發(fā)者推薦的10種常用工具

    這篇文章主要為大家詳細(xì)介紹了Java開(kāi)發(fā)者推薦的10種常用工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 詳解Java如何實(shí)現(xiàn)一個(gè)優(yōu)秀的散列表

    詳解Java如何實(shí)現(xiàn)一個(gè)優(yōu)秀的散列表

    這篇文章主要通過(guò)簡(jiǎn)單的示例為大家詳細(xì)介紹了在Java中如何實(shí)現(xiàn)一個(gè)優(yōu)秀的散列表,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-07-07
  • Springmvc異常處理器及攔截器實(shí)現(xiàn)代碼

    Springmvc異常處理器及攔截器實(shí)現(xiàn)代碼

    這篇文章主要介紹了Springmvc異常處理器及攔截器實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Spring?Security內(nèi)置過(guò)濾器的維護(hù)方法

    Spring?Security內(nèi)置過(guò)濾器的維護(hù)方法

    這篇文章主要介紹了Spring?Security的內(nèi)置過(guò)濾器是如何維護(hù)的,本文給我們分析一下HttpSecurity維護(hù)過(guò)濾器的幾個(gè)方法,需要的朋友可以參考下
    2022-02-02
  • 使用java實(shí)現(xiàn)云端資源共享小程序的代碼

    使用java實(shí)現(xiàn)云端資源共享小程序的代碼

    這篇文章主要介紹了用java寫(xiě)一個(gè)云端資源共享小程序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring Boot mybatis-config 和 log4j 輸出sql 日志的方式

    Spring Boot mybatis-config 和 log4j 輸出sql 日志的方式

    這篇文章主要介紹了Spring Boot mybatis-config 和 log4j 輸出sql 日志的方式,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • Java實(shí)現(xiàn)計(jì)算機(jī)程序設(shè)計(jì)思路

    Java實(shí)現(xiàn)計(jì)算機(jī)程序設(shè)計(jì)思路

    這篇文章主要為大家介紹了Java實(shí)現(xiàn)計(jì)算機(jī)程序設(shè)計(jì)思路,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評(píng)論