1. 什么是爬蟲舶胀?
“網(wǎng)絡(luò)爬蟲”也叫“網(wǎng)絡(luò)蜘蛛”概说,如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么蜘蛛就是在網(wǎng)上爬來爬去的蜘蛛嚣伐,爬蟲程序通過請(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. 有什么作用声怔?
通過有效的爬蟲手段批量采集數(shù)據(jù),可以降低人工成本舱呻,提高有效數(shù)據(jù)量醋火,給予運(yùn)營/銷售的數(shù)據(jù)支撐,加快產(chǎn)品發(fā)展箱吕。?
3. 業(yè)界的情況
目前互聯(lián)網(wǎng)產(chǎn)品競爭激烈芥驳,業(yè)界大部分都會(huì)使用爬蟲技術(shù)對(duì)競品產(chǎn)品的數(shù)據(jù)進(jìn)行挖掘、采集茬高、大數(shù)據(jù)分析兆旬,這是必備手段,并且很多公司都設(shè)立了“爬蟲工程師”的崗位
4. 合法性?
爬蟲是利用程序進(jìn)行批量爬取網(wǎng)頁上的公開信息怎栽,也就是前端顯示的數(shù)據(jù)信息丽猬。因?yàn)樾畔⑹峭耆_的,所以是合法的熏瞄。其實(shí)就像瀏覽器一樣脚祟,瀏覽器解析響應(yīng)內(nèi)容并渲染為頁面,而爬蟲解析響應(yīng)內(nèi)容采集想要的數(shù)據(jù)進(jìn)行存儲(chǔ)强饮。
?5. 反爬蟲
爬蟲很難完全的制止由桌,道高一尺魔高一丈,這是一場沒有硝煙的戰(zhàn)爭,碼農(nóng)VS碼農(nóng)?
反爬蟲一些手段:
(1) 啟動(dòng)Robots協(xié)議行您。
(2)以設(shè)置閾值的方式挑選非正常訪問铭乾。
(3)增加登錄以限制。
(4)AJAX動(dòng)態(tài)加載數(shù)據(jù)娃循。
(5)以謀略取勝炕檩。例如:投毒。
?6. 選擇一門語言
爬蟲可以用各種語言寫, C++, Java都可以, 為什么要Python?
首先用C++搞網(wǎng)絡(luò)開發(fā)的例子不多(可能是我見得太少)捌斧,然后由于Oracle收購了Sun, Java目前雖然在Android開發(fā)上很重要, 但是如果Google官司進(jìn)展不順利, 那么很有可能用Go語言替代掉Java來做Android開發(fā). 在這計(jì)算機(jī)速度高速增長的年代里, 選語言都要看業(yè)績, 真是稍不注意就落后于時(shí)代. 隨著計(jì)算機(jī)速度的高速發(fā)展, 某種語言開發(fā)的軟件運(yùn)行的時(shí)間復(fù)雜度的常數(shù)系數(shù)已經(jīng)不像以前那么重要, 我們可以越來越偏愛為程序員打造的而不是為計(jì)算機(jī)打造的語言. 比如Ruby這種傳說中的純種而又飄逸的的OOP語言, 或者Python這種稍嚴(yán)謹(jǐn)而流行庫又非常多的語言, 都大大弱化了針對(duì)計(jì)算機(jī)運(yùn)行速度而打造的特性, 強(qiáng)化了為程序員容易思考而打造的特性. 所以我選擇Python笛质。而且python語法易學(xué),容易上手社區(qū)活躍骤星,實(shí)現(xiàn)方案多可參考经瓷,各種功能包豐富,少量代碼即可完成強(qiáng)大功能洞难。
?7. 爬蟲基本套路
基本流程: 目標(biāo)數(shù)據(jù)舆吮、來源地址、結(jié)構(gòu)分析队贱、 實(shí)現(xiàn)構(gòu)思色冀、操刀編碼。
基本手段:破解請(qǐng)求限制柱嫌;請(qǐng)求頭設(shè)置锋恬,如:useragant為有效客戶端;控制請(qǐng)求頻率(根據(jù)實(shí)際情景)编丘;IP代理与学; 簽名/加密參數(shù)從html/cookie/js分析;破解登錄授權(quán)嘉抓; 請(qǐng)求帶上用戶cookie信息索守; 破解驗(yàn)證碼;簡單的驗(yàn)證碼可以使用識(shí)圖讀驗(yàn)證碼第三方庫抑片。
解析數(shù)據(jù): HTML Dom解析卵佛;正則匹配,通過的正則表達(dá)式來匹配想要爬取的數(shù)據(jù)敞斋,如:有些數(shù)據(jù)不是在html 標(biāo)簽里截汪,而是在html的script 標(biāo)簽的js變量中;使用第三方庫解析html dom植捎,比較喜歡類jquery的庫衙解; 數(shù)據(jù)字符串; 正則匹配(根據(jù)情景使用)鸥跟;轉(zhuǎn) JSON/XML 對(duì)象進(jìn)行解析
1. 常用的工具
(1) python(2) pycharm(3) 瀏覽器:chrome丢郊、 火狐(4) fiddler
2. fiddler的使用
請(qǐng)求 (Request) 部分詳解
Headers | 顯示客戶端發(fā)送到服務(wù)器的 HTTP 請(qǐng)求的,header 顯示為一個(gè)分級(jí)視圖盔沫,包含了 Web 客戶端信息医咨、Cookie枫匾、傳輸狀態(tài)等
Textview | 顯示 POST 請(qǐng)求的 body 部分為文本
WebForms | 顯示請(qǐng)求的 GET 參數(shù) 和 POST body 內(nèi)容
HexView | 用十六進(jìn)制數(shù)據(jù)顯示請(qǐng)求
Auth | 顯示響應(yīng) header 中的 Proxy-Authorization(代理身份驗(yàn)證) 和 Authorization(授權(quán)) 信息
Raw? | 將整個(gè)請(qǐng)求顯示為純文本
JSON | 顯示JSON格式文件
XML | 如果請(qǐng)求的 body 是 XML格式,就是用分級(jí)的 XML 樹來顯示它
響應(yīng) (Response) 部分詳解
Transformer | 顯示響應(yīng)的編碼信息
Headers | 用分級(jí)視圖顯示響應(yīng)的 header
TextView | 使用文本顯示相應(yīng)的 body
ImageVies | 如果請(qǐng)求是圖片資源拟淮,顯示響應(yīng)的圖片
HexView | 用十六進(jìn)制數(shù)據(jù)顯示響應(yīng)
WebView | 響應(yīng)在 Web 瀏覽器中的預(yù)覽效果
Auth | 顯示響應(yīng) header 中的 Proxy-Authorization(代理身份驗(yàn)證) 和 Authorization(授權(quán)) 信息
Caching | 顯示此請(qǐng)求的緩存信息
Privacy | 顯示此請(qǐng)求的私密 (P3P) 信息
Raw | 將整個(gè)響應(yīng)顯示為純文本
JSON | 顯示JSON格式文件
XML | 如果響應(yīng)的 body 是 XML 格式干茉,就是用分級(jí)的 XML 樹來顯示它