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ù)韧骗。
初步使用
我們利用它來解析 HTML 代碼嘉抒,簡單示例:
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的處理归斤,它甚至可以幫助你輸入賬戶,密碼刁岸,然后點擊登陸按鈕脏里。