Python爬蟲之requests庫(kù)網(wǎng)絡(luò)爬取簡(jiǎn)單實(shí)戰(zhàn)

  • 實(shí)例1:直接爬取網(wǎng)頁(yè)
  • 實(shí)例2 : 構(gòu)造headers,突破訪問(wèn)限制,模擬瀏覽器爬取網(wǎng)頁(yè)
  • 實(shí)例3 : 分析請(qǐng)求參數(shù)葡盗,構(gòu)造請(qǐng)求參數(shù)爬取所需網(wǎng)頁(yè)
  • 實(shí)例4: 爬取圖片
  • 實(shí)例5: 分析請(qǐng)求參數(shù)审磁,構(gòu)造請(qǐng)求參數(shù)爬取所需信息

實(shí)例1:京東商品頁(yè)面的爬取

image.png

現(xiàn)在我們利用requests庫(kù)爬取這個(gè)頁(yè)面的商品信息

首先引入requests庫(kù)

 import requests

然后爬取頁(yè)面

r =requests.get("https://item.jd.com/4645290.html")

然后我們測(cè)試狀態(tài)碼,編碼和內(nèi)容

r.status_code
r.encoding
r.text[:1000]
image.png

到此,說(shuō)明我們已經(jīng)成功利用requests庫(kù)獲取到了商品頁(yè)面的信息徐钠。

完整的爬取代碼

import requests
url = "https://item.jd.com/4645290.html"
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[:1000])
except:
    print("爬取失敗")

實(shí)例2 : 亞馬遜商品頁(yè)面爬取

我們選取如下界面進(jìn)行爬取

image.png

首先癌刽,我們按照之前的步驟進(jìn)行爬取
引入requests庫(kù),然后get尝丐,判斷status_code

r = requests.get("https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071")
r.status_code

顯示503显拜,說(shuō)明服務(wù)器錯(cuò)誤,
503 (服務(wù)不可用) 服務(wù)器目前無(wú)法使用(由于超載或停機(jī)維護(hù))爹袁。 通常远荠,這只是暫時(shí)狀態(tài)。

我們查看編碼發(fā)現(xiàn)

r.encoding
'ISO-8859-1'

我們需要轉(zhuǎn)換編碼

r.encoding = r.apparent_encoding

然后顯示爬取內(nèi)容失息,發(fā)現(xiàn)

image.png

發(fā)現(xiàn)出現(xiàn)了錯(cuò)誤譬淳。

網(wǎng)頁(yè)告訴我們出現(xiàn)了錯(cuò)誤,但只要我們正確獲取到了網(wǎng)頁(yè)的內(nèi)容盹兢,就說(shuō)明網(wǎng)路方面肯定是沒(méi)有錯(cuò)誤的邻梆。這說(shuō)明亞馬遜對(duì)爬蟲有限制,一般對(duì)爬蟲限制的話绎秒,就是robots協(xié)議浦妄,其中還可以對(duì)訪問(wèn)對(duì)象進(jìn)行限制,限制只能通過(guò)相應(yīng)的瀏覽器訪問(wèn)见芹,而限制爬蟲的訪問(wèn)剂娄。

我們通過(guò)request.header查看我們發(fā)給亞馬遜的請(qǐng)求頭部到底是什么內(nèi)容

image.png

我們看到信息中的user-agent的信息是python。這說(shuō)明我們的程序誠(chéng)實(shí)的告訴亞馬遜玄呛,這個(gè)程序是python的requests庫(kù)發(fā)起的請(qǐng)求阅懦。
亞馬遜的服務(wù)器看到這是個(gè)爬蟲請(qǐng)求,所以就返回錯(cuò)誤的信息徘铝。

那么我們?nèi)绾尾拍茉L問(wèn)呢耳胎?
我們都知道requests庫(kù)可以更改請(qǐng)求的頭部信息惯吕,我們可以模擬一個(gè)瀏覽器的請(qǐng)求

我們構(gòu)造一個(gè)鍵值對(duì)

kv = {'user-agent':'Mozilla/5.0'}
url = "https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071"
r = requests.get(url, headers = kv)

我們查看狀態(tài)碼,發(fā)現(xiàn)為200怕午,說(shuō)明這一次成功獲取到了頁(yè)面的內(nèi)容

image.png

完整的爬取代碼

import requests
url = "https://www.amazon.cn/dp/B0011F7WU4/ref=s9_acss_bw_cg_JAVA_1a1_w?m=A1AJ19PSB66TGU&pf_rd_m=A1U5RCOVU0NYF2&pf_rd_s=merchandised-search-6&pf_rd_r=D9MK8AMFACZGHMFJGRXP&pf_rd_t=101&pf_rd_p=f411a6d2-b2c5-4105-abd9-69dbe8c05f1c&pf_rd_i=1899860071"
try:
    kv = {'user-agent':'Mozilla/5.0'}
    r = requests.get(url, headers = kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text[1000:2000])
except:
    print("爬取失敗")

實(shí)例3: 百度/360搜索關(guān)鍵詞提交爬蟲

搜索關(guān)鍵詞提交的接口:

https://www.baidu.com/s?ie=UTF-8&wd=keyword

通過(guò)requests的params參數(shù)混埠,構(gòu)造查詢參數(shù)

完整的代碼

import requests

keyword = "劉德華"
url = "http://www.baidu.com/s?ie=UTF-8"

try:
    kv = {"wd":keyword}
    r = requests.get(url, params = kv)
    print(r.request.url)
    r.raise_for_status()
    print(len(r.text))
    print(r.text)
except:
    print("爬取失敗")

實(shí)例4 網(wǎng)絡(luò)圖片的爬取和存儲(chǔ)

網(wǎng)絡(luò)中圖片連接的格式

http://www.example.com/picture.jpg

假設(shè)我們現(xiàn)在要爬取

http://www.nationalgeographic.com.cn/

圖片連接:

http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.jpg

完整的爬取代碼:

import requests
import os

url = "http://image.nationalgeographic.com.cn/2015/0121/20150121033625957.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("爬取失敗")

實(shí)例5 IP地址歸屬地查詢

此網(wǎng)站可以查詢IP地址歸屬地
http://m.ip138.com/ip.asp

我們分析它請(qǐng)求的過(guò)程,發(fā)現(xiàn)它的請(qǐng)求接口就是在地址后附加參數(shù)诗轻,類似于百度搜索

http://m.ip138.com/ip.asp?ip=125.220.159.160

所以我們可以構(gòu)造查詢參數(shù)钳宪,發(fā)送給服務(wù)器,然后獲取返回的結(jié)果

完整代碼

import requests
url = "http://m.ip138.com/ip.asp?"
ip = "125.220.159.160"
kv = {"ip":ip}

try:
    r = requests.get(url, params = kv)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.text)
except:
    print("爬取失敗")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扳炬,一起剝皮案震驚了整個(gè)濱河市吏颖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恨樟,老刑警劉巖半醉,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異劝术,居然都是意外死亡缩多,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門养晋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衬吆,“玉大人,你說(shuō)我怎么就攤上這事绳泉⊙仿眨” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵零酪,是天一觀的道長(zhǎng)冒嫡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)四苇,這世上最難降的妖魔是什么孝凌? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮月腋,結(jié)果婚禮上蟀架,老公的妹妹穿的比我還像新娘。我一直安慰自己罗售,他們只是感情好辜窑,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布钩述。 她就那樣靜靜地躺著寨躁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牙勘。 梳的紋絲不亂的頭發(fā)上职恳,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天所禀,我揣著相機(jī)與錄音,去河邊找鬼放钦。 笑死色徘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的操禀。 我是一名探鬼主播褂策,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼颓屑!你這毒婦竟也來(lái)了斤寂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤揪惦,失蹤者是張志新(化名)和其女友劉穎遍搞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體器腋,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溪猿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纫塌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊县。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖措左,靈堂內(nèi)的尸體忽然破棺而出翎冲,到底是詐尸還是另有隱情,我是刑警寧澤媳荒,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布抗悍,位于F島的核電站,受9級(jí)特大地震影響钳枕,放射性物質(zhì)發(fā)生泄漏缴渊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一鱼炒、第九天 我趴在偏房一處隱蔽的房頂上張望衔沼。 院中可真熱鬧,春花似錦昔瞧、人聲如沸指蚁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凝化。三九已至,卻和暖如春酬荞,著一層夾襖步出監(jiān)牢的瞬間搓劫,已是汗流浹背瞧哟。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枪向,地道東北人勤揩。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像秘蛔,于是被迫代替她去往敵國(guó)和親陨亡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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