小白也能懂的Python爬蟲之Requests 庫的介紹和操作實(shí)例

一、什么是爬蟲?

網(wǎng)絡(luò)爬蟲(又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機(jī)器人,在FOAF社區(qū)中間,更經(jīng)常的稱為網(wǎng)頁追逐者),是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動(dòng)索引、模擬程序或者蠕蟲。

其實(shí)通俗的講就是通過程序去獲取web頁面上自己想要的數(shù)據(jù),也就是自動(dòng)抓取數(shù)據(jù)。

你可以爬去妹子的圖片,爬取自己想看看的視頻。。等等你想要爬取的數(shù)據(jù),只要你能通過瀏覽器訪問的數(shù)據(jù)都可以通過爬蟲獲取

二、爬蟲的本質(zhì)

模擬瀏覽器打開網(wǎng)頁,獲取網(wǎng)頁中我們想要的那部分?jǐn)?shù)據(jù)

瀏覽器打開網(wǎng)頁的過程:

當(dāng)你在瀏覽器中輸入地址后,經(jīng)過DNS服務(wù)器找到服務(wù)器主機(jī),向服務(wù)器發(fā)送一個(gè)請(qǐng)求,服務(wù)器經(jīng)過解析后發(fā)送給用戶瀏覽器結(jié)果,包括html,js,css等文件內(nèi)容,瀏覽器解析出來最后呈現(xiàn)給用戶在瀏覽器上看到的結(jié)果

所以用戶看到的瀏覽器的結(jié)果就是由HTML代碼構(gòu)成的,我們爬蟲就是為了獲取這些內(nèi)容,通過分析和過濾html代碼,從中獲取我們想要資源(文本,圖片,視頻.....)

三、爬蟲的基本流程

發(fā)起請(qǐng)求

通過HTTP庫向目標(biāo)站點(diǎn)發(fā)起請(qǐng)求,也就是發(fā)送一個(gè)Request,請(qǐng)求可以包含額外的header等信息,等待服務(wù)器響應(yīng)

獲取響應(yīng)內(nèi)容

如果服務(wù)器能正常響應(yīng),會(huì)得到一個(gè)Response,Response的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能是HTML,Json字符串,二進(jìn)制數(shù)據(jù)(圖片或者視頻)等類型

解析內(nèi)容

得到的內(nèi)容可能是HTML,可以用正則表達(dá)式,頁面解析庫進(jìn)行解析,可能是Json,可以直接轉(zhuǎn)換為Json對(duì)象解析,可能是二進(jìn)制數(shù)據(jù),可以做保存或者進(jìn)一步的處理

保存數(shù)據(jù)

保存形式多樣,可以存為文本,也可以保存到數(shù)據(jù)庫,或者保存特定格式的文件

四、什么是Requests

Requests是用python語言基于urllib編寫的,采用的是Apache2 Licensed開源協(xié)議的HTTP庫

如果你看過上篇文章關(guān)于urllib庫的使用,你會(huì)發(fā)現(xiàn),其實(shí)urllib還是非常不方便的,而Requests它會(huì)比urllib更加方便,可以節(jié)約我們大量的工作。(用了requests之后,你基本都不愿意用urllib了)一句話,requests是python實(shí)現(xiàn)的最簡(jiǎn)單易用的HTTP庫,建議爬蟲使用requests庫。

默認(rèn)安裝好python之后,是沒有安裝requests模塊的,需要單獨(dú)通過pip安裝

五、Requests 庫的基礎(chǔ)知識(shí)

我們通過調(diào)用Request庫中的方法,得到返回的對(duì)象。其中包括兩個(gè)對(duì)象,request對(duì)象和response對(duì)象。

request對(duì)象就是我們要請(qǐng)求的url,response對(duì)象是返回的內(nèi)容

六、Requests的安裝

1.強(qiáng)烈建議大家使用pip進(jìn)行安裝:pip insrall requests

2.Pycharm安裝:file-》default settings-》project interpreter-》搜索requests-》install package-》ok

七、Requests庫實(shí)的操作例

1、京東商品的爬取--普通爬取框架

import requests

url = "https://item.jd.com/2967929.html"

try:

? ? r = requests.get(url)

? ? r.raise_for_status()

? ? r.encoding = r.apparent_encoding

? ? print(r.text[:1000])

except:

? ? print("爬取失?。?)

2、亞馬遜商品的爬取--通過修改headers字段,模擬瀏覽器向網(wǎng)站發(fā)起請(qǐng)求

import requests

url="https://www.amazon.cn/gp/product/B01M8L5Z3Y"

try:

? ? kv = {'user-agent':'Mozilla/5.0'}

? ? r=requests.get(url,headers=kv)

? ? r.raise_for_status()

? ? r.encoding=r.apparent_encoding

? ? print(r.status_code)

? ? print(r.text[:1000])

except:

? ? print("爬取失敗")

3、百度/360搜索關(guān)鍵詞提交--修改params參數(shù)提交關(guān)鍵詞

import requests

url="http://www.baidu.com/s"

try:

? ? kv={'wd':'Python'}

? ? r=requests.get(url,params=kv)

? ? print(r.request.url)

? ? r.raise_for_status()

? ? print(len(r.text))

? ? print(r.text[500:5000])

except:

? ? print("爬取失敗")

4、網(wǎng)絡(luò)圖片的爬取和存儲(chǔ)--結(jié)合os庫和文件操作的使用

import requests

import os

url="http://tc.sinaimg.cn/maxwidth.800/tc.service.weibo.com/p3_pstatp_com/6da229b421faf86ca9ba406190b6f06e.jpg"

root="D://pics//"

path=root + url.split('/')[-1]

try:

? ? if not os.path.exists(root):

? ? ? ? os.mkdir(root)

? ? if not os.path.exists(path):

? ? ? ? r = requests.get(url)

? ? ? ? with open(path, 'wb') as f:

? ? ? ? ? ? f.write(r.content)

? ? ? ? ? ? f.close()

? ? ? ? ? ? print("文件保存成功")

? ? else:

? ? ? ? print("文件已存在")

except:

? ? print("爬取失敗")

最后:異常處理

在你不確定會(huì)發(fā)生什么錯(cuò)誤時(shí),盡量使用try...except來捕獲異常所有的requests exception:

import requests

from requests.exceptions import ReadTimeout,HTTPError,RequestException

try:

? ? response = requests.get('http://www.baidu.com',timeout=0.5)

? ? print(response.status_code)

except ReadTimeout:

? ? print('timeout')

except HTTPError:

? ? print('httperror')

except RequestException:

? ? print('reqerror')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容