[實(shí)戰(zhàn)演練]python3使用requests模塊爬取頁(yè)面內(nèi)容

本文摘要:
1.安裝pip
2.安裝requests模塊
3.安裝beautifulsoup4
4.requests模塊淺析
    + 發(fā)送請(qǐng)求 + 傳遞URL參數(shù)
    + 響應(yīng)內(nèi)容
    + 獲取網(wǎng)頁(yè)編碼
    + 獲取響應(yīng)狀態(tài)碼
5.案例演示
后記


1.安裝pip

我的個(gè)人桌面系統(tǒng)用的linuxmint沸停,系統(tǒng)默認(rèn)沒(méi)有安裝pip膜毁,考慮到后面安裝requests模塊使用pip,所以我這里第一步先安裝pip。

$ sudo apt install python-pip

安裝成功瘟滨,查看PIP版本:

$ pip -V


2.安裝requests模塊

這里我是通過(guò)pip方式進(jìn)行安裝:

$ pip install requests

安裝requests

運(yùn)行import requests候醒,如果沒(méi)提示錯(cuò)誤,那說(shuō)明已經(jīng)安裝成功了杂瘸!

檢驗(yàn)是否安裝成功


3.安裝beautifulsoup4

Beautiful Soup 是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)倒淫。它能夠通過(guò)你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找败玉、修改文檔的方式敌土。Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間。

$ sudo apt-get install python3-bs4

注:這里我使用的是python3的安裝方式运翼,如果你用的是python2,可以使用下面命令安裝返干。

$ sudo pip install beautifulsoup4


4.requests模塊淺析

1)發(fā)送請(qǐng)求

首先當(dāng)然是要導(dǎo)入 Requests 模塊:

>>> import requests

然后,獲取目標(biāo)抓取網(wǎng)頁(yè)南蹂。這里我以簡(jiǎn)書(shū)為例:

>>> r = requests.get('http://www.reibang.com/p/b8ef5c005ba4')

這里返回一個(gè)名為 r 的響應(yīng)對(duì)象犬金。我們可以從這個(gè)對(duì)象中獲取所有我們想要的信息。這里的get是http的響應(yīng)方法六剥,所以舉一反三你也可以將其替換為put晚顷、delete、post疗疟、head该默。

2)傳遞URL參數(shù)

有時(shí)我們想為 URL 的查詢字符串傳遞某種數(shù)據(jù)。如果你是手工構(gòu)建 URL策彤,那么數(shù)據(jù)會(huì)以鍵/值對(duì)的形式置于 URL 中栓袖,跟在一個(gè)問(wèn)號(hào)的后面。例如店诗, jianshu.com/get?key=val裹刮。 Requests 允許你使用?params?關(guān)鍵字參數(shù),以一個(gè)字符串字典來(lái)提供這些參數(shù)庞瘸。

舉例來(lái)說(shuō)捧弃,當(dāng)我們google搜索“python爬蟲(chóng)”關(guān)鍵詞時(shí),newwindow(新窗口打開(kāi))擦囊、q及oq(搜索關(guān)鍵詞)等參數(shù)可以手工組成URL 违霞,那么你可以使用如下代碼:

>>> payload = {'newwindow': '1', 'q': 'python爬蟲(chóng)', 'oq': 'python爬蟲(chóng)'}

>>> r = requests.get("https://www.google.com/search", params=payload)

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

通過(guò)r.text或r.content來(lái)獲取頁(yè)面響應(yīng)內(nèi)容。

>>> import requests

>>> r = requests.get('https://github.com/timeline.json')

>>> r.text

Requests 會(huì)自動(dòng)解碼來(lái)自服務(wù)器的內(nèi)容瞬场。大多數(shù) unicode 字符集都能被無(wú)縫地解碼买鸽。這里補(bǔ)充一點(diǎn)r.text和r.content二者的區(qū)別,簡(jiǎn)單說(shuō):

resp.text返回的是Unicode型的數(shù)據(jù)贯被;

resp.content返回的是bytes型也就是二進(jìn)制的數(shù)據(jù)眼五;

所以如果你想取文本妆艘,可以通過(guò)r.text,如果想取圖片弹砚,文件双仍,則可以通過(guò)r.content。

4)獲取網(wǎng)頁(yè)編碼

>>> r = requests.get('http://www.reibang.com/')

>>> r.encoding

'utf-8'


5)獲取響應(yīng)狀態(tài)碼

我們可以檢測(cè)響應(yīng)狀態(tài)碼:

>>> r = requests.get('http://www.reibang.com/')

>>> r.status_code

200


5.案例演示

最近公司剛引入了一款OA系統(tǒng)桌吃,這里我以其官方說(shuō)明文檔頁(yè)面為例朱沃,并且只抓取頁(yè)面中文章標(biāo)題和內(nèi)容等有用信息。

演示環(huán)境

操作系統(tǒng):linuxmint

python版本:python 3.5.2

使用模塊:requests茅诱、beautifulsoup4

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
_author_ = 'GavinHsueh'

import requests
import bs4

#要抓取的目標(biāo)頁(yè)碼地址
url = 'http://www.ranzhi.org/book/ranzhi/about-ranzhi-4.html'

#抓取頁(yè)碼內(nèi)容逗物,返回響應(yīng)對(duì)象
response = requests.get(url)

#查看響應(yīng)狀態(tài)碼
status_code = response.status_code

#使用BeautifulSoup解析代碼,并鎖定頁(yè)碼指定標(biāo)簽內(nèi)容
content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
element = content.find_all(id='book')

print(status_code)
print(element)


程序運(yùn)行返回爬去結(jié)果:

抓取成功

關(guān)于爬去結(jié)果亂碼問(wèn)題

其實(shí)起初我是直接用的系統(tǒng)默認(rèn)自帶的python2操作的,但在抓取返回內(nèi)容的編碼亂碼問(wèn)題上折騰了老半天瑟俭,google了多種解決方案都無(wú)效翎卓。在被python2“整瘋“之后,只好老老實(shí)實(shí)用python3了摆寄。對(duì)于python2的爬取頁(yè)面內(nèi)容亂碼問(wèn)題失暴,歡迎各位前輩們分享經(jīng)驗(yàn),以幫助我等后生少走彎路微饥。


后記

python的爬蟲(chóng)相關(guān)模塊有很多逗扒,除了requests模塊,再如urllib和pycurl以及tornado等欠橘。相比而言矩肩,我個(gè)人覺(jué)得requests模塊是相對(duì)簡(jiǎn)單易上手的了。通過(guò)文本肃续,大家可以迅速學(xué)會(huì)使用python的requests模塊爬取頁(yè)碼內(nèi)容黍檩。本人能力有限,如果文章有任何錯(cuò)誤歡迎不吝賜教始锚,其次如果大家有任何關(guān)于python爬去頁(yè)面內(nèi)容的疑難雜問(wèn)刽酱,也歡迎和大家一起交流討論。

我們共同學(xué)習(xí)瞧捌,共同交流肛跌,共同進(jìn)步!

參考:

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#

http://cn.python-requests.org/zh_CN/latest/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末察郁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子转唉,更是在濱河造成了極大的恐慌皮钠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赠法,死亡現(xiàn)場(chǎng)離奇詭異麦轰,居然都是意外死亡乔夯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門款侵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)末荐,“玉大人,你說(shuō)我怎么就攤上這事新锈〖自啵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵妹笆,是天一觀的道長(zhǎng)块请。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拳缠,這世上最難降的妖魔是什么墩新? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮窟坐,結(jié)果婚禮上海渊,老公的妹妹穿的比我還像新娘。我一直安慰自己哲鸳,他們只是感情好臣疑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帕胆,像睡著了一般朝捆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懒豹,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天芙盘,我揣著相機(jī)與錄音,去河邊找鬼脸秽。 笑死儒老,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的记餐。 我是一名探鬼主播驮樊,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼片酝!你這毒婦竟也來(lái)了囚衔?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雕沿,失蹤者是張志新(化名)和其女友劉穎练湿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體审轮,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肥哎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年辽俗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篡诽。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崖飘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杈女,到底是詐尸還是另有隱情朱浴,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布碧信,位于F島的核電站赊琳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砰碴。R本人自食惡果不足惜躏筏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呈枉。 院中可真熱鬧趁尼,春花似錦、人聲如沸猖辫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啃憎。三九已至芝囤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辛萍,已是汗流浹背悯姊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贩毕,地道東北人悯许。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辉阶,于是被迫代替她去往敵國(guó)和親先壕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • 目錄: Python網(wǎng)絡(luò)爬蟲(chóng)(一)- 入門基礎(chǔ)Python網(wǎng)絡(luò)爬蟲(chóng)(二)- urllib爬蟲(chóng)案例Python網(wǎng)絡(luò)爬...
    一只寫程序的猿閱讀 12,836評(píng)論 17 68
  • 環(huán)境管理管理Python版本和環(huán)境的工具谆甜。p–非常簡(jiǎn)單的交互式python版本管理工具垃僚。pyenv–簡(jiǎn)單的Pyth...
    MrHamster閱讀 3,788評(píng)論 1 61
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,451評(píng)論 6 428
  • GitHub 上有一個(gè) Awesome - XXX 系列的資源整理,資源非常豐富,涉及面非常廣规辱。awesome-p...
    若與閱讀 18,629評(píng)論 4 418
  • 今天是創(chuàng)業(yè)課第二期學(xué)員的簡(jiǎn)書(shū)100天冈在,我的簡(jiǎn)書(shū)數(shù)字是96,還差4篇按摘。雖然沒(méi)有順利完成包券,但還是想要寫下感受,做個(gè)紀(jì)念...
    朱泓默閱讀 290評(píng)論 4 4