一、字符串知識(shí)點(diǎn):
bytes:二進(jìn)制(互聯(lián)網(wǎng)上數(shù)據(jù)都是以二進(jìn)制的方式傳輸?shù)模?/p>
str:unicode編碼的呈現(xiàn)形式,常用的實(shí)現(xiàn)方式是UTF-8
str轉(zhuǎn)換為bytes的方法:encode()
bytes轉(zhuǎn)換為str的方法:decode()
二、HTTP與HTTPS知識(shí)點(diǎn):
HTTP:超文本傳輸協(xié)議,默認(rèn)端口號(hào)80,性能更好
HTTPS:HTTP+SSL(安全套接字層),默認(rèn)端口號(hào)443,安全性更好
三、爬蟲(chóng)的概念與流程:
爬蟲(chóng)是模擬瀏覽器發(fā)送請(qǐng)求,獲取響應(yīng)
url-->發(fā)送請(qǐng)求-->獲取響應(yīng)-->提取url-->提取數(shù)據(jù)-->保存
四、url的形式:
scheme:協(xié)議(http,https,ftp)
host:服務(wù)器的IP地址或者域名(www.baidu.com)
port:服務(wù)器的端口(80或者443)
path:訪問(wèn)資源的路徑,百度搜索爬蟲(chóng)(/s?wd=爬蟲(chóng)&rsv_spt=1&rsv_iqid=0x8d278b16000116e5&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=9&rsv_sug1=8&rsv_sug7=100&rsv_sug2=0&inputT=1138&rsv_sug4=2397)
query-string:參數(shù),發(fā)送給http服務(wù)器的數(shù)據(jù)
anchor:錨(跳轉(zhuǎn)到網(wǎng)頁(yè)的指定錨點(diǎn)位置)
完整的url例子:
https://www.baidu.com/s?wd=爬蟲(chóng)&rsv_spt=1&rsv_iqid=0x8d278b16000116e5&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=9&rsv_sug1=8&rsv_sug7=100&rsv_sug2=0&inputT=1138&rsv_sug4=2397
五、HTTP請(qǐng)求頭:
打開(kāi)F12,點(diǎn)擊Network,在ALL列表找到訪問(wèn)的Host,查看request-Headers。
Host:主機(jī)和端口號(hào)
connection:鏈接類型
Upgrade-Insecure-Requests:一般為1,升級(jí)為HTTPS請(qǐng)求
User-Agent:瀏覽器名稱,需要模擬這個(gè)
Accept:多個(gè)傳輸文件類型
Accept-Encoding:文件編解碼格式
Accept-Language:支持的語(yǔ)言類型
六、響應(yīng)狀態(tài)碼:
200:成功
302or307:臨時(shí)轉(zhuǎn)移至新的url
404:相應(yīng)失敗
500:服務(wù)器內(nèi)部錯(cuò)誤
七、爬蟲(chóng)基礎(chǔ)知識(shí)點(diǎn)
1、爬蟲(chóng)是什么:
抓取網(wǎng)頁(yè)數(shù)據(jù)的程序。
2、爬蟲(chóng)怎么抓取網(wǎng)頁(yè)數(shù)據(jù):
網(wǎng)頁(yè)都有自己唯一的URL(統(tǒng)一資源定位符)來(lái)進(jìn)行定位。
網(wǎng)頁(yè)都是用html(超文本標(biāo)記語(yǔ)言)來(lái)描述頁(yè)面信息。
網(wǎng)頁(yè)都是使用HTTP/HTTPS(超文本傳輸協(xié)議)協(xié)議來(lái)傳輸HTML數(shù)據(jù)。
①、首先確定需要爬取的網(wǎng)頁(yè)URL地址。
②、通過(guò)HTTP/HTTPS協(xié)議來(lái)獲取對(duì)應(yīng)的HTML頁(yè)
③、提取HTML頁(yè)面里面有用的數(shù)據(jù)(反復(fù)精練處理數(shù)據(jù)得到目標(biāo)數(shù)據(jù))。
3、如何抓取HTML頁(yè)面:
①、HTTP請(qǐng)求的處理,urllib、urllib2、requests
②、處理后的請(qǐng)求可以模擬瀏覽器發(fā)送請(qǐng)求、獲取服務(wù)器響應(yīng)的文件。
③、解析服務(wù)器相應(yīng)的內(nèi)容:re,xpath、jsonpath、pyquery等。
使用某一種描述性來(lái)給我們需要的數(shù)據(jù)定義一個(gè)匹配規(guī)則,
符合這個(gè)規(guī)則的數(shù)據(jù)就會(huì)被匹配。比如常用的re,正則表達(dá)式。
④、如何采集動(dòng)態(tài)HTML、驗(yàn)證碼的處理。
通常的動(dòng)態(tài)頁(yè)面采集:Selenium+PhantomJS(無(wú)界面):模擬真實(shí)瀏覽器加載js等非靜態(tài)數(shù)據(jù)。
機(jī)器學(xué)習(xí)庫(kù),機(jī)器圖像識(shí)別系統(tǒng):Tesseract,可以處理簡(jiǎn)單的驗(yàn)證碼,復(fù)雜的交給打碼平臺(tái)
⑤、Scrapy框架:(Scrapy,Pyspider)
高定制性、高性能(異步網(wǎng)絡(luò)框架twisted):速度下載快,提供數(shù)據(jù)存儲(chǔ),數(shù)據(jù)下載,提取規(guī)則等組件。
⑥、分布式策略:scrapy-redis,以Redis數(shù)據(jù)庫(kù)為核心的一套組件
讓Scrapy框架支持分布式的功能,主要在Redis里做請(qǐng)求指紋去重、請(qǐng)求分配、數(shù)據(jù)臨時(shí)存儲(chǔ)。
⑦、爬蟲(chóng)-反爬蟲(chóng)-反反爬蟲(chóng):爬蟲(chóng)最難的就是網(wǎng)站另一邊的反爬蟲(chóng)人員。
User-Agent、代理、驗(yàn)證碼、動(dòng)態(tài)數(shù)據(jù)加載、加密數(shù)據(jù)等。
數(shù)據(jù)價(jià)值是否值得費(fèi)勁做爬蟲(chóng),機(jī)器成本+人力成本>數(shù)據(jù)價(jià)值,一般能爬出來(lái)。