05 爬蟲 urllib2 GET請求

2021-09-26 15:17:43 字數 3085 閱讀 6669

urllib2預設只支援http/https的get和post方法!

# ipython2 中的測試結果

in [1]

:import urllib

in [2]

: word =

# 通過urllib.urlencode()方法,將字典鍵值對按url編碼轉換,從而能被web伺服器接受。

in [3]

: urllib.urlencode(word)

out[3]

:"wd=%e4%bc%a0%e6%99%ba%e6%92%ad%e5%ae%a2"

# 通過urllib.unquote()方法,把 url編碼字串,轉換回原先字串。

in [4]

:print urllib.unquote(

"wd=%e4%bc%a0%e6%99%ba%e6%92%ad%e5%ae%a2"

)wd=傳智播客

一般http請求提交資料,需要編碼成 url編碼格式,然後做為url的一部分,或者作為引數傳到request物件中。

瀏覽器的url會跳轉成如圖所示:

import urllib #負責url編碼處理

import urllib2

url =

""word =

word = urllib.urlencode(word)

#轉換成url編碼格式(字串)

newurl = url +

"?"+ word # url首個分隔符就是 ?

headers=

request = urllib2.request(newurl, headers=headers)

response = urllib2.urlopen(request)

print response.read(

)第二頁:

第三頁:

發現規律了吧,貼吧中每個頁面不同之處,就是url最後的pn的值,其餘的都是一樣的,我們可以抓住這個規律。

1.先寫乙個main,提示使用者輸入要爬取的貼吧名,並用urllib.urlencode()進行轉碼,然後組合url,假設是lol吧,那麼組合後的url就是:

# 模擬 main 函式

if __name__ ==

"__main__"

: kw =

raw_input

("請輸入需要爬取的貼吧:"

)# 輸入起始頁和終止頁,str轉成int型別

beginpage =

int(

raw_input

("請輸入起始頁:"))

endpage =

int(

raw_input

("請輸入終止頁:"))

url =

""key = urllib.urlencode(

)# 組合後的url示例:

url = url + key

tiebaspider(url, beginpage, endpage)

def

tiebaspider

(url, beginpage, endpage)

:"""

作用:負責處理url,分配每個url去傳送請求

url:需要處理的第乙個url

beginpage: 爬蟲執行的起始頁面

endpage: 爬蟲執行的截止頁面

"""for page in

range

(beginpage, endpage +1)

: pn =

(page -1)

*50filename =

"第"+

str(page)

+"頁.html"

# 組合為完整的 url,並且pn值每次增加50

fullurl = url +

"&pn="

+str

(pn)

#print fullurl

# 呼叫loadpage()傳送請求獲取html頁面

html = loadpage(fullurl, filename)

# 將獲取到的html頁面寫入本地磁碟檔案

writefile(html, filename)

3.我們已經之前寫出乙個爬取乙個網頁的**。現在,我們可以將它封裝成乙個小函式loadpage,供我們使用。

def

loadpage

(url, filename)

:'''

作用:根據url傳送請求,獲取伺服器響應檔案

filename: 檔名

'''print

+ filename

headers =

request = urllib2.request(url, headers = headers)

response = urllib2.urlopen(request)

return response.read(

)

4.最後如果我們希望將爬取到了每頁的資訊儲存在本地磁碟上,我們可以簡單寫乙個儲存檔案的介面。

def

writefile

(html, filename)

:"""

作用:儲存伺服器響應檔案到本地磁碟檔案裡

html: 伺服器響應檔案

filename: 本地磁碟檔名

"""print

"正在儲存"

+ filename

with

open

(filename,

'w')

as f:

f.write(html)

print

"-"*

20

爬蟲 urllib的get請求

quote 方法 是將漢字轉換成unicode編碼 import urllib.request import urllib.parse url 請求物件的定製是為了解決反爬的第一種手段 headers 將 周杰倫 三個漢字變成unicode編碼的格式 需要依賴urllib.parse name ur...

2 爬蟲基礎 urllib2模組

底層操作request物件 請求頭設定之useragent使用者 請求頭設定 使用者 useragent 自定義請求頭訊息 請求方式之get post請求 get請求處理 post請求處理 handler處理器自定義開鎖人opener 自定義http opener 自定義proxy opener 會...

爬蟲 urllib2 Headers 常用

爬蟲 學習筆記 爬蟲請求 時要模擬瀏覽器,這就要用到user agent pc端useragent phone useragent 利用構建好的useragents.py檔案來充當爬蟲請求頭 usr bin env python coding utf 8 import urllib2 import ...