一? 什么是爬蟲?
? ??網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛描滔,網(wǎng)絡(luò)機(jī)器人), 是一種按照一定的規(guī)則圆存,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本仇哆。
通俗的講: 就是模擬客戶端發(fā)起網(wǎng)絡(luò)請(qǐng)求沦辙,接收請(qǐng)求的響應(yīng),按照一定的規(guī)則讹剔,自動(dòng)的抓取互聯(lián)網(wǎng)信息的程序油讯。
原則上只要瀏覽器能夠做的事情,爬蟲都能夠?qū)崿F(xiàn)
二??關(guān)于Python爬蟲沈跨,我們需要學(xué)習(xí)掌握的基本知識(shí)有:
????Python基礎(chǔ)語法學(xué)習(xí)(基礎(chǔ)知識(shí))
靜態(tài)頁面兔综,動(dòng)態(tài)頁面HTML頁面源碼的獲取(數(shù)據(jù)抓热沓邸)
HTML頁面的(非結(jié)構(gòu)化)數(shù)據(jù)提取,結(jié)構(gòu)化數(shù)據(jù)的提榷Э鳌(數(shù)據(jù)提取)
數(shù)據(jù)提取的持久化(文本戴已、數(shù)據(jù)庫(kù))
Scrapy框架以及scrapy-redis分布式策略(第三方框架)
爬蟲(Spider)糖儡、反爬蟲(Anti-Spider)休玩、反反爬蟲(Anti-Anti-Spider)之間的斗爭(zhēng)....
三??爬蟲的基本流程
? ? ? ? ? ? 1.分析網(wǎng)站,得到目標(biāo)url
2.根據(jù)url,發(fā)起請(qǐng)求,獲取頁面的HTML源碼
3.從頁面源碼中提取數(shù)據(jù)
a.提取到目標(biāo)數(shù)據(jù),做數(shù)據(jù)的賽選和持久化存儲(chǔ)
b.從頁面中提取到新的url地址,繼續(xù)執(zhí)行第二部操作
4.爬蟲結(jié)束:所有的目標(biāo)url都提取完畢,并且得到數(shù)據(jù)了,再也沒有其他請(qǐng)求任務(wù)了,這是意味著爬蟲結(jié)束
四 urllib模塊的使用
???????????????urllib庫(kù)的基本使用 所謂網(wǎng)頁抓取呐矾,就是把URL地址中指定的網(wǎng)絡(luò)資源從網(wǎng)絡(luò)流中讀取出來蜒犯,保存到本地荞膘。 在Python中有很多庫(kù)可以用來抓取網(wǎng)頁羽资,我們先學(xué)習(xí)urllib。?? ??????
我們會(huì)從下面三個(gè)方面講解urllib:
????request: 它是最基本的HTTP請(qǐng)求模塊,可以用來模擬發(fā)送請(qǐng)求狭郑,就像在瀏覽器中輸入網(wǎng)址汇在,然后敲擊回車鍵一樣,使用的時(shí)候只需要給庫(kù)方法傳入相關(guān)的URL和相關(guān)的參數(shù)即可.
????error: 異常處理模塊糕殉,如果出現(xiàn)請(qǐng)求錯(cuò)誤,我們可以使用這個(gè)模塊來捕獲異常雳锋,然后進(jìn)行重試或者其他操作赡磅,保證程序不會(huì)意外終止.
????parse: 這是一個(gè)工具模塊宝与,提供了許多url的處理方法,比如拆分,解析,合并等等.
? ? ?
五? requests模塊的使用
? ? ? ? ? ?Requests: 讓 HTTP 服務(wù)人類
????????????雖然Python的標(biāo)準(zhǔn)庫(kù)中 urllib 模塊已經(jīng)包含了平常我們使用的大多數(shù)功能习劫,但是它的 API 使用起來讓人感覺不太好,而 Requests 自稱 "HTTP for Humans"袒餐,說明使用更簡(jiǎn)潔方便谤狡。
????????????Requests 唯一的一個(gè)非轉(zhuǎn)基因的 Python HTTP 庫(kù),人類可以安全享用:)
????????????Requests 繼承了urllib的所有特性墓懂。Requests支持HTTP連接保持和連接池,支持使用cookie保持會(huì)話匕积,支持文件上傳榜跌,支持自動(dòng)確定響應(yīng)內(nèi)容的編碼,支持國(guó)際化的URL和 POST 數(shù)據(jù)自動(dòng)編碼钓葫。
????????????requests 的底層實(shí)現(xiàn)其實(shí)就是 urllib
????????????Requests的文檔非常完備,中文文檔也相當(dāng)不錯(cuò)笼吟。Requests能完全滿足當(dāng)前網(wǎng)絡(luò)的需求,支持Python 2.6--3.5贷帮,而且能在PyPy下完美運(yùn)行撵枢。
六? 正則表達(dá)式
? ??????正則表達(dá)式概述:正則表達(dá)式,又稱正規(guī)表示式锄禽、正規(guī)表示法、正規(guī)表達(dá)式磁滚、規(guī)則表達(dá)式宵晚、常規(guī)表示法(英語:Regular Expression,在代碼中常簡(jiǎn)寫為regex淤刃、regexp或RE),是計(jì)算機(jī)科學(xué)的一個(gè)概念陨仅。正則表達(dá)式使用單個(gè)字符串來描述铝侵、匹配一系列匹配某個(gè)句法規(guī)則的字符串。在很多文本編輯器里咪鲜,正則表達(dá)式通常被用來檢索嗜诀、替換那些匹配某個(gè)模式的文本。
????????Regular Expression的“Regular”一般被譯為“正則”隆敢、“正規(guī)”、“常規(guī)”穴墅。此處的“Regular”即是“規(guī)則”、“規(guī)律”的意思玄货,Regular Expression即“描述某種規(guī)則的表達(dá)式”之意。
????????目的 給定一個(gè)正則表達(dá)式和另一個(gè)字符串夹界,我們可以達(dá)到如下的目的:
????????????????給定的字符串是否符合正則表達(dá)式的過濾邏輯(稱作“匹配”);
????????????????可以通過正則表達(dá)式可柿,從字符串中獲取我們想要的特定部分复斥。
? ??
? ? 正則表達(dá)式的使用:
? ??????????在 Python 中,我們可以使用內(nèi)置的 re 模塊來使用正則表達(dá)式痢虹。 有一點(diǎn)需要特別注意的是世分,正則表達(dá)式使用 對(duì)特殊字符進(jìn)行轉(zhuǎn)義,所以如果我們要使用原始字符串臀玄,只需加一個(gè) r 前綴健无,示例: re 模塊的一般使用步驟如下:
????????????使用 compile() 函數(shù)將正則表達(dá)式的字符串形式編譯為一個(gè) Pattern 對(duì)象
? ? ? ? ? ? 通過 Pattern 對(duì)象提供的一系列方法對(duì)文本進(jìn)行匹配查找累贤,獲得匹配結(jié)果臼膏,一個(gè) Match 對(duì)象渗磅。
????????????最后使用 Match 對(duì)象提供的屬性和方法獲得信息始鱼,根據(jù)需要進(jìn)行其他的操作
七? XPath選擇器
????????????XPath (XML Path Language) 是一門在 XML 文檔中查找信息的語言起暮,可用來在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷鞋怀。? ??????
? ??????????XPath 開發(fā)工具 1.開源的XPath表達(dá)式編輯工具:XMLQuire(XML格式文件可用) 2.Chrome插件 XPath Helper 3.Firefox插件 XPath Checker
????????????選取節(jié)點(diǎn) XPath 使用路徑表達(dá)式來選取 XML 文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集密似。這些路徑表達(dá)式和我們?cè)诔R?guī)的電腦文件系統(tǒng)中看到的表達(dá)式非常相似残腌。
? ??????????