Python利用Requests庫寫爬蟲(一)

  • 基本Get請求:
#-*- coding:utf-8 -*-
import requests
url = 'http://www.baidu.com'
r = requests.get(url)
print r.text

  • 帶參數(shù)Get請求:
#-*- coding:utf-8 -*-
import requests
url = 'http://www.baidu.com'
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get(url, params=payload)
print r.text
  • POST請求模擬登陸及一些返回對象的方法:
#-*- coding:utf-8 -*-
import requests
url1 = 'http://www.exanple.com/login'#登陸地址
url2 = "http://www.example.com/main"#需要登陸才能訪問的地址
data={"user":"user","password":"pass"}
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
            "Accept-Encoding":"gzip",
            "Accept-Language":"zh-CN,zh;q=0.8",
            "Referer":"http://www.example.com/",
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
            }
res1 = requests.post(url1, data=data, headers=headers)
res2 = requests.get(url2, cookies=res1.cookies, headers=headers)

print res2.content#獲得二進制響應(yīng)內(nèi)容
print res2.raw#獲得原始響應(yīng)內(nèi)容,需要stream=True
print res2.raw.read(50)
print type(res2.text)#返回解碼成unicode的內(nèi)容
print res2.url
print res2.history#追蹤重定向
print res2.cookies
print res2.cookies['example_cookie_name']
print res2.headers
print res2.headers['Content-Type']
print res2.headers.get('content-type')
print res2.json#講返回內(nèi)容編碼為json
print res2.encoding#返回內(nèi)容編碼
print res2.status_code#返回http狀態(tài)碼
print res2.raise_for_status()#返回錯誤狀態(tài)碼

  • 使用Session()對象的寫法(Prepared Requests):
#-*- coding:utf-8 -*-
import requests
s = requests.Session()
url1 = 'http://www.exanple.com/login'#登陸地址
url2 = "http://www.example.com/main"#需要登陸才能訪問的地址
data={"user":"user","password":"pass"}
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
            "Accept-Encoding":"gzip",
            "Accept-Language":"zh-CN,zh;q=0.8",
            "Referer":"http://www.example.com/",
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
            }

prepped1 = requests.Request('POST', url1,
    data=data,
    headers=headers
).prepare()
s.send(prepped1)


'''
也可以這樣寫
res = requests.Request('POST', url1,
data=data,
headers=headers
)
prepared = s.prepare_request(res)
# do something with prepped.body
# do something with prepped.headers
s.send(prepared)
'''

prepare2 = requests.Request('POST', url2,
    headers=headers
).prepare()
res2 = s.send(prepare2)

print res2.content
  • 另一種寫法 :
#-*- coding:utf-8 -*-
import requests
s = requests.Session()
url1 = 'http://www.exanple.com/login'#登陸地址
url2 = "http://www.example.com/main"#需要登陸才能訪問的頁面地址
data={"user":"user","password":"pass"}
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
            "Accept-Encoding":"gzip",
            "Accept-Language":"zh-CN,zh;q=0.8",
            "Referer":"http://www.example.com/",
            "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
            }
res1 = s.post(url1, data=data)
res2 = s.post(url2)
print(resp2.content)

SessionApi

  • 其他的一些請求方式
>>> r = requests.put("http://httpbin.org/put")
>>> r = requests.delete("http://httpbin.org/delete")
>>> r = requests.head("http://httpbin.org/get")
>>> r = requests.options("http://httpbin.org/get")

遇到的問題:


在cmd下執(zhí)行,遇到個小錯誤:

UnicodeEncodeError:'gbk' codec can't encode character u'\xbb' in   
position 23460: illegal multibyte sequence

分析:
1贺归、Unicode是編碼還是解碼

UnicodeEncodeError

很明顯是在編碼的時候出現(xiàn)了錯誤

2淆两、用了什么編碼

'gbk' codec can't encode character

使用GBK編碼出錯

解決辦法:

確定當前字符串,比如

#-*- coding:utf-8 -*-
import requests
url = 'http://www.baidu.com'
r = requests.get(url)
print r.encoding
>utf-8

已經(jīng)確定html的字符串是utf-8的牧氮,則可以直接去通過utf-8去編碼琼腔。

print r.text.encode('utf-8')

參考鏈接:官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市踱葛,隨后出現(xiàn)的幾起案子丹莲,更是在濱河造成了極大的恐慌光坝,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甥材,死亡現(xiàn)場離奇詭異盯另,居然都是意外死亡,警方通過查閱死者的電腦和手機洲赵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門鸳惯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叠萍,你說我怎么就攤上這事芝发。” “怎么了苛谷?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵辅鲸,是天一觀的道長。 經(jīng)常有香客問我腹殿,道長独悴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任锣尉,我火速辦了婚禮刻炒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘自沧。我一直安慰自己坟奥,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布暂幼。 她就那樣靜靜地躺著筏勒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旺嬉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天厨埋,我揣著相機與錄音邪媳,去河邊找鬼。 笑死荡陷,一個胖子當著我的面吹牛雨效,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播废赞,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼徽龟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唉地?” 一聲冷哼從身側(cè)響起据悔,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤传透,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后极颓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱盐,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年菠隆,在試婚紗的時候發(fā)現(xiàn)自己被綠了兵琳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡骇径,死狀恐怖躯肌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情破衔,我是刑警寧澤清女,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站运敢,受9級特大地震影響校仑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜传惠,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一迄沫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卦方,春花似錦羊瘩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至浇坐,卻和暖如春睬捶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背近刘。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工擒贸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人觉渴。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓介劫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親案淋。 傳聞我的和親對象是個殘疾皇子座韵,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

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