溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

發(fā)布時(shí)間:2022-01-07 11:36:38 來源:億速云 閱讀:146 作者:iii 欄目:編程語言

這篇文章主要介紹“java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些”,在日常操作中,相信很多人在java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

1、有 “道德” 的爬蟲

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

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

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

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

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

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

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

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

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

除了協(xié)議之外,我們?cè)诓杉袨樯弦残枰酥疲?『數(shù)據(jù)安全管理辦法(征求意見稿)』的第二章第十六條指出:

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

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

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

根據(jù)《最高人民法院 最高人民檢察院關(guān)于辦理侵犯公民個(gè)人信息刑事案件適用法律若干問題的解釋》第五條規(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ù)端的交互都是通過 Http 協(xié)議,當(dāng)然也有不是 Http 協(xié)議的,這個(gè)能不能采集我就不知道啦,沒有采集過,所以我們只談?wù)?Http  協(xié)議,在 Web 網(wǎng)頁(yè)中分析 Http 協(xié)議還是比較簡(jiǎn)單,我們以百度檢索一條新聞為例

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

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

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

在右邊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)求頭來屏蔽爬蟲,所以里面的參數(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)求來說這個(gè)還是非常重要的,因?yàn)樵谶@里可以查看到請(qǐng)求參數(shù),對(duì)我們模擬登陸等 Post 請(qǐng)求非常有用。

上面是網(wǎng)頁(yè)版的 HTTP 請(qǐng)求的鏈接分析,如果需要采集 APP 里面的數(shù)據(jù)就需要借助模擬器了,因?yàn)?APP  里沒有調(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ù)師沒有道具一樣,只能干瞪眼啦。例如下面這個(gè) HTML 頁(yè)面

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

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

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

標(biāo)題所在的 span 標(biāo)簽我已經(jīng)在圖中框出來啦,我們?cè)撊绾谓馕鲞@個(gè)節(jié)點(diǎn)信息呢?方法有千千萬萬,經(jīng)常使用的選擇器應(yīng)該是 CSS 選擇器 和 XPath  :

使用 CSS 選擇器解析的寫法為:#wgt-ask > h2 > span

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

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

java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些

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

4、了解反爬蟲策略

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

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

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

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

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

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

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

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

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

以上就是爬蟲的一些基本知識(shí),主要介紹了網(wǎng)絡(luò)爬蟲的使用工具和反爬蟲策略,這些東西在后續(xù)對(duì)我們的爬蟲學(xué)習(xí)會(huì)有所幫助,由于這幾年斷斷續(xù)續(xù)的寫過幾個(gè)爬蟲項(xiàng)目,使用  Java 爬蟲也是在前期,后期都是用 Python,最近突然間對(duì) Java 爬蟲又感興趣了,所以準(zhǔn)備寫一個(gè)爬蟲系列博文,重新梳理一下 Java 網(wǎng)絡(luò)爬蟲,算是對(duì)  Java 爬蟲的一個(gè)總結(jié),如果能幫助到想利用 Java 做網(wǎng)絡(luò)爬蟲的小伙伴,那就更棒啦。Java  網(wǎng)絡(luò)爬蟲預(yù)計(jì)會(huì)有六篇文章的篇幅,從簡(jiǎn)單到復(fù)雜,一步一步深入,內(nèi)容涉及到了我這些年爬蟲所遇到的所有問題。下面是模擬的六篇文章介紹。

1、網(wǎng)絡(luò)爬蟲,原來這么簡(jiǎn)單

這一篇是網(wǎng)絡(luò)爬蟲的入門,會(huì)使用 Jsoup 和 HttpClient 兩種方式獲取到頁(yè)面,然后利用選擇器解析得到數(shù)據(jù)。最后你會(huì)收獲到爬蟲就是一條 http  請(qǐng)求,就是這么簡(jiǎn)單。

2、網(wǎng)頁(yè)采集遇到登錄問題,我該怎么辦?

這一章節(jié)簡(jiǎn)單的聊一聊獲取需要登錄的數(shù)據(jù),以獲取豆瓣個(gè)人信息為例,從手動(dòng)設(shè)置 cookies 和模擬登陸這兩種方式簡(jiǎn)單的聊一聊這類問題。

3、網(wǎng)頁(yè)采集遇到數(shù)據(jù) Ajax 異步加載,我該怎么辦?

這一章節(jié)簡(jiǎn)單的聊一聊異步數(shù)據(jù)的問題,以網(wǎng)易新聞為例,從利用 htmlunit 工具獲取渲染完頁(yè)面和反向思維直接獲取到 Ajax  請(qǐng)求連接獲取數(shù)據(jù)兩種方式,簡(jiǎn)單的聊一下這類問題的處理方式。

4、網(wǎng)頁(yè)采集 IP 被封,我該怎么辦?

IP 訪問被限制這應(yīng)該是常見的事情,以豆瓣電影為例,主要以設(shè)置代理IP為中心,簡(jiǎn)單的聊一聊 IP  被限制的解決辦法,還會(huì)簡(jiǎn)單的聊一下如何搭建自己的ip代理服務(wù)。

5、網(wǎng)絡(luò)采集性能太差,我該怎么辦?

有時(shí)候?qū)ε老x程序的性能有要求,這種單線程的方式可能就行不通了,我們可能就需要多線程甚至是分布式的爬蟲程序啦,所以這一篇主要聊一聊多線程爬蟲以及分布式爬蟲架構(gòu)方案。

6、開源爬蟲框架 webmagic 使用案例解析

以前用 webmagic 做過一次爬蟲,但是那個(gè)時(shí)候我似懂非懂的,沒有很好的理解 webmagic  框架,經(jīng)過這幾年的經(jīng)歷,我現(xiàn)在對(duì)這個(gè)框架有了全新的認(rèn)識(shí),所以想按照 webmagic 的規(guī)范搭建一個(gè)簡(jiǎn)單的 demo來體驗(yàn) webmagic  的強(qiáng)大之處。

到此,關(guān)于“java網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識(shí)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI