爬蟲細(xì)節(jié)總結(jié)

request:

request對象是從客戶端向服務(wù)器發(fā)出請求,包括用戶提交的信息以及客戶端的一些信息嘹履≈嬷罚客戶端可通過HTML表單或在網(wǎng)頁地址后面提供參數(shù)的方法提交數(shù)據(jù)轴脐,然后通過request對象的相關(guān)方法來獲取這些數(shù)據(jù)。

在爬蟲中的request其實就是通過python向服務(wù)器發(fā)出request請求(客戶端向服務(wù)器端發(fā)起請求)曼氛,得到其返回的信息豁辉。

Request中包含什么?

基本GET請求(URL? headers參數(shù) 和 parmas參數(shù))

1. 最基本的GET請求可以直接用get方法

response = requests.get("http://www.baidu.com/")

- response的常用方法:

? ? - response.text 返回解碼后的字符串

? ? - respones.content 以字節(jié)形式(二進制)返回舀患。

? ? - response.status_code  響應(yīng)狀態(tài)碼

? ? - response.request.headers  請求的請求頭

? ? - response.headers  響應(yīng)頭

? ? - response.encoding = 'utf-8' 可以設(shè)置編碼類型

? ? - response.encoding 獲取當(dāng)前的編碼

? ? - response.json() 內(nèi)置的JSON解碼器徽级,以json形式返回,前提返回的內(nèi)容確保是json格式的,不然解析出錯會拋異常

基本POST請求(data參數(shù))

最基本的GET請求可以直接用post方法


2. 傳入data數(shù)據(jù)

對于 POST 請求來說聊浅,我們一般需要為它增加一些參數(shù)餐抢。那么最基本的傳參方法可以利用 data 這個參數(shù)

正則表達式(re)

為什么要學(xué)正則表達式?

因為我們下載下了的數(shù)據(jù)是全部的網(wǎng)頁,這些數(shù)據(jù)很龐大并且很混亂低匙,大部分的東西使我們不關(guān)心的旷痕,因此我們需要將之按我們的需要過濾和匹配出來。

那么對于文本的過濾或者規(guī)則的匹配顽冶,最強大的就是正則表達式欺抗,是Python爬蟲世界里必不可少的神兵利器。

正則表達式:又稱規(guī)則表達式强重,通常被用來檢索绞呈、替換那些符合某個模式(規(guī)則)的文本贸人。

使用正則表達式要達到的目的是什么呢?

- 給定的字符串是否符合正則表達式的過濾邏輯(“匹配”)佃声;

- 通過正則表達式艺智,從文本字符串中獲取我們想要的特定部分(“過濾”)


正則表達式的匹配規(guī)則如下:


Python 的 re 模塊

在 Python 中,我們可以使用內(nèi)置的 re 模塊來使用正則表達式圾亏。

re 模塊的一般使用步驟如下:

- 使用 compile() 函數(shù)將正則表達式的字符串形式編譯為一個 Pattern 對象

- 通過 Pattern 對象提供的一系列方法對文本進行匹配查找十拣,獲得匹配結(jié)果,一個 Match 對象志鹃。

- 最后使用 Match 對象提供的屬性和方法獲得信息夭问,根據(jù)需要進行其他的操作

compile 函數(shù)

compile 函數(shù)用于編譯正則表達式,生成一個 Pattern 對象

findall

findall 以列表形式返回全部能匹配的子串弄跌,如果沒有匹配甲喝,則返回一個空列表。


正則規(guī)則學(xué)習(xí)參考網(wǎng)站:正則學(xué)習(xí)網(wǎng)站

xpath選擇器

我正則用的不好铛只,處理HTML文檔很累埠胖,有沒有其他的方法?

有淳玩!那就是XPath直撤,我們可以先將 HTML文件 轉(zhuǎn)換成 XML文檔,然后用 XPath 查找 HTML 節(jié)點或元素蜕着。

什么是XPath谋竖?

XPath (XML Path Language) 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷承匣。


文檔:w3c官方文檔xpath

注意:在使用XPath的語法運用到Python抓取時要先轉(zhuǎn)換為xml蓖乘。

lxml庫

lxml 是 一個HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 數(shù)據(jù)韧骗。

lxml? Python官方文檔

初步使用

我們利用它來解析 HTML 代碼嘉抒,簡單示例:


xpath? 參考資料


BeautifulSoup4選擇器

和 lxml 一樣,Beautiful Soup 也是一個HTML/XML的解析器袍暴,主要的功能也是如何解析和提取 HTML/XML 數(shù)據(jù)些侍。

lxml 只會局部遍歷,而Beautiful Soup 是基于HTML DOM的政模,會載入整個文檔岗宣,解析整個DOM樹,因此時間和內(nèi)存開銷都會大很多淋样,所以性能要低于lxml耗式。

BeautifulSoup 用來解析 HTML 比較簡單,API非常人性化,支持CSS選擇器纽什、Python標(biāo)準(zhǔn)庫中的HTML解析器措嵌,也支持 lxml 的 XML解析器躲叼。

官方文檔

例子:


PyQuery簡介

pyquery相當(dāng)于jQuery的python實現(xiàn)芦缰,可以用于解析HTML網(wǎng)頁等。它的語法與jQuery幾乎完全相同枫慷,對于使用過jQuery的人來說很熟悉让蕾,也很好上手

中文教程

官方文檔

#pyquery語法規(guī)則類似于Jquery,可以對html文本進行解析

pq('css選擇器')

items():獲取到多個標(biāo)簽時,使用items()將PyQuery轉(zhuǎn)換為一個生成器

然后在使用for in 循環(huán)filter('css選擇器'):過濾text():獲取標(biāo)簽的文本attr('屬性名')獲取屬性值

什么是多線程?

CPU是計算機計算的基本單位或听,用來計算和處理任務(wù)? 可以包含多個進程探孝,進程中可以包含多個線程,進程誉裆、線程顿颅、鎖lock(阻塞)。

多線程足丢,密集的I/O操作粱腻、讀寫

多進程:用于密集的計算,一個cpu只能運行一個進程

使用多線程會讓爬蟲進行多任務(wù)的爬取斩跌∩苄快捷,高效耀鸦。


原理圖


什么是selenium?

Selenium是一個Web的自動化測試工具柬批,最初是為網(wǎng)站自動化測試而開發(fā)的,類型像我們玩游戲用的按鍵精靈袖订,可以按指定的命令自動操作氮帐,不同是Selenium 可以直接運行在瀏覽器上,它支持所有主流的瀏覽器(包括PhantomJS這些無界面的瀏覽器)洛姑。 Selenium 可以根據(jù)我們的指令上沐,讓瀏覽器自動加載頁面,獲取需要的數(shù)據(jù)吏口,甚至頁面截屏奄容,或者判斷網(wǎng)站上某些動作是否發(fā)生。

它用于爬蟲中的作用产徊?

Selenium測試直接運行在瀏覽器中昂勒,就像真正的用戶在操作一樣。支持的瀏覽器包括IE舟铜、Mozilla Firefox戈盈、Mozilla Suite等。使用它爬取頁面也十分方便,只需要按照訪問步驟模擬人在操作就可以了塘娶,完全不用操心Cookie,Session的處理归斤,它甚至可以幫助你輸入賬戶,密碼刁岸,然后點擊登陸按鈕脏里。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虹曙,隨后出現(xiàn)的幾起案子迫横,更是在濱河造成了極大的恐慌,老刑警劉巖酝碳,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矾踱,死亡現(xiàn)場離奇詭異,居然都是意外死亡疏哗,警方通過查閱死者的電腦和手機呛讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來返奉,“玉大人贝搁,你說我怎么就攤上這事『馄浚” “怎么了徘公?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哮针。 經(jīng)常有香客問我关面,道長,這世上最難降的妖魔是什么十厢? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任等太,我火速辦了婚禮,結(jié)果婚禮上蛮放,老公的妹妹穿的比我還像新娘缩抡。我一直安慰自己,他們只是感情好包颁,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布瞻想。 她就那樣靜靜地躺著,像睡著了一般娩嚼。 火紅的嫁衣襯著肌膚如雪蘑险。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天岳悟,我揣著相機與錄音佃迄,去河邊找鬼泼差。 笑死,一個胖子當(dāng)著我的面吹牛呵俏,可吹牛的內(nèi)容都是我干的堆缘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼普碎,長吁一口氣:“原來是場噩夢啊……” “哼吼肥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起随常,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤潜沦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绪氛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡涝影,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年枣察,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燃逻。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡序目,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伯襟,到底是詐尸還是另有隱情猿涨,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布姆怪,位于F島的核電站叛赚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稽揭。R本人自食惡果不足惜俺附,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溪掀。 院中可真熱鬧事镣,春花似錦、人聲如沸揪胃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喊递。三九已至随闪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間册舞,已是汗流浹背蕴掏。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盛杰。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓挽荡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親即供。 傳聞我的和親對象是個殘疾皇子定拟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容