1.爬蟲(chóng)介紹

1. 什么是爬蟲(chóng)?
網(wǎng)絡(luò)爬蟲(chóng)也叫網(wǎng)絡(luò)蜘蛛,如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么蜘蛛就是在網(wǎng)上爬來(lái)爬去的蜘蛛,爬蟲(chóng)程序通過(guò)請(qǐng)求url地址,根據(jù)響應(yīng)的內(nèi)容進(jìn)行解析采集數(shù)據(jù),比如:如果響應(yīng)內(nèi)容是html,分析dom結(jié)構(gòu),進(jìn)行dom解析、或者正則匹配,如果響應(yīng)內(nèi)容是xml/json數(shù)據(jù),就可以轉(zhuǎn)數(shù)據(jù)對(duì)象,然后對(duì)數(shù)據(jù)進(jìn)行解析。
2. 有什么作用?
通過(guò)有效的爬蟲(chóng)手段批量采集數(shù)據(jù),可以降低人工成本,提高有效數(shù)據(jù)量,給予運(yùn)營(yíng)/銷(xiāo)售的數(shù)據(jù)支撐,加快產(chǎn)品發(fā)展。

3. 業(yè)界的情況
目前互聯(lián)網(wǎng)產(chǎn)品競(jìng)爭(zhēng)激烈,業(yè)界大部分都會(huì)使用爬蟲(chóng)技術(shù)對(duì)競(jìng)品產(chǎn)品的數(shù)據(jù)進(jìn)行挖掘、采集、大數(shù)據(jù)分析,這是必備手段,并且很多公司都設(shè)立了爬蟲(chóng)工程師
的崗位
4. 合法性 ?
爬蟲(chóng)是利用程序進(jìn)行批量爬取網(wǎng)頁(yè)上的公開(kāi)信息,也就是前端顯示的數(shù)據(jù)信息。因?yàn)樾畔⑹峭耆_(kāi)的,所以是合法的。其實(shí)就像瀏覽器一樣,瀏覽器解析響應(yīng)內(nèi)容并渲染為頁(yè)面,而爬蟲(chóng)解析響應(yīng)內(nèi)容采集想要的數(shù)據(jù)進(jìn)行存儲(chǔ)。
5. 反爬蟲(chóng)
爬蟲(chóng)很難完全的制止,道高一尺魔高一丈,這是一場(chǎng)沒(méi)有硝煙的戰(zhàn)爭(zhēng),碼農(nóng)VS碼農(nóng) ?反爬蟲(chóng)一些手段:
合法檢測(cè):請(qǐng)求校驗(yàn)(useragent,referer,接口加簽名,等)
小黑屋:IP/用戶限制請(qǐng)求頻率,或者直接攔截
投毒:反爬蟲(chóng)高境界可以不用攔截,攔截是一時(shí)的,投毒返回虛假數(shù)據(jù),可以誤導(dǎo)競(jìng)品決策
... ...
6. 選擇一門(mén)語(yǔ)言
爬蟲(chóng)可以用各種語(yǔ)言寫(xiě), C++, Java都可以, 為什么要Python?
首先用C++搞網(wǎng)絡(luò)開(kāi)發(fā)的例子不多(可能是我見(jiàn)得太少)然后由于Oracle收購(gòu)了Sun, Java目前雖然在Android開(kāi)發(fā)上很重要, 但是如果Google官司進(jìn)展不順利, 那么很有可能用Go語(yǔ)言替代掉Java來(lái)做Android開(kāi)發(fā). 在這計(jì)算機(jī)速度高速增長(zhǎng)的年代里, 選語(yǔ)言都要看他爹的業(yè)績(jī), 真是稍不注意就落后于時(shí)代. 隨著計(jì)算機(jī)速度的高速發(fā)展, 某種語(yǔ)言開(kāi)發(fā)的軟件運(yùn)行的時(shí)間復(fù)雜度的常數(shù)系數(shù)已經(jīng)不像以前那么重要, 我們可以越來(lái)越偏愛(ài)為程序員打造的而不是為計(jì)算機(jī)打造的語(yǔ)言. 比如Ruby這種傳說(shuō)中的純種而又飄逸的的OOP語(yǔ)言, 或者Python這種稍嚴(yán)謹(jǐn)而流行庫(kù)又非常多的語(yǔ)言, 都大大弱化了針對(duì)計(jì)算機(jī)運(yùn)行速度而打造的特性, 強(qiáng)化了為程序員容易思考而打造的特性. 所以我選擇Python
7. 選擇Python版本
有2和3兩個(gè)版本, 3比較新, 聽(tīng)說(shuō)改動(dòng)大. 根據(jù)我在知乎上搜集的觀點(diǎn)來(lái)看, 我還是傾向于使用”在趨勢(shì)中將會(huì)越來(lái)越火”的版本, 而非”目前已經(jīng)很穩(wěn)定而且很成熟”的版本. 這是個(gè)人喜好, 而且預(yù)測(cè)不一定準(zhǔn)確. 但是如果Python3無(wú)法像Python2那么火, 那么整個(gè)Python語(yǔ)言就不可避免的隨著時(shí)間的推移越來(lái)越落后, 因此我想其實(shí)選哪個(gè)的最壞風(fēng)險(xiǎn)都一樣, 但是最好回報(bào)卻是Python3的大. 其實(shí)兩者區(qū)別也可以說(shuō)大也可以說(shuō)不大, 最終都不是什么大問(wèn)題. 我選擇的是Python 3
8. 爬蟲(chóng)基本套路
基本流程
目標(biāo)數(shù)據(jù)
來(lái)源地址
結(jié)構(gòu)分析
實(shí)現(xiàn)構(gòu)思
操刀編碼
基本手段
簡(jiǎn)單的驗(yàn)證碼可以使用識(shí)圖讀驗(yàn)證碼第三方庫(kù)
請(qǐng)求帶上用戶cookie信息
請(qǐng)求頭設(shè)置,如:useragant為有效客戶端
控制請(qǐng)求頻率(根據(jù)實(shí)際情景)
IP代理
簽名/加密參數(shù)從html/cookie/js分析
破解請(qǐng)求限制
破解登錄授權(quán)
破解驗(yàn)證碼
解析數(shù)據(jù)
正則匹配(根據(jù)情景使用)
轉(zhuǎn) JSON/XML 對(duì)象進(jìn)行解析
正則匹配,通過(guò)的正則表達(dá)式來(lái)匹配想要爬取的數(shù)據(jù),如:有些數(shù)據(jù)不是在html 標(biāo)簽里,而是在html的script 標(biāo)簽的js變量中
使用第三方庫(kù)解析html dom,比較喜歡類(lèi)jquery的庫(kù)
HTML Dom解析
數(shù)據(jù)字符串
9. python爬蟲(chóng)
python寫(xiě)爬蟲(chóng)的優(yōu)勢(shì)
python語(yǔ)法易學(xué),容易上手
社區(qū)活躍,實(shí)現(xiàn)方案多可參考
各種功能包豐富
少量代碼即可完成強(qiáng)大功能
涉及模塊包
selenium
xpath
beautiful soup
json
re
threading
urllib
requests
請(qǐng)求
多線程
正則
json解析
html dom解析
lxml
操作瀏覽器