urllib2預設支援HTTP/HTTPS的GET和POST方法
阿新 • • 發佈:2018-12-09
urllib.urlencode()
urllib和urllib2都是接受URL請求的相關模組,但是提供了不同的功能。兩個最顯著的不同如下:
1.urllib僅可以接受URL,不能建立設定headers的Request例項; 2.但是urllib提供urlencode方法用來GET查詢字串的產生,而urllib2則沒有。(這是urllib和urllib2經常一起使用的主要原因) 3.編碼同作使用urllib的urlencode()函式,幫我們講key:value這樣的鍵值對轉換成"key=value"這樣的字串,解碼工作可以使用urllib的unquote()函式。(注意,不是urllib2.urlencode())
注意:舉例是用3.6版本,如果是urllib,我們就要用urllib.parse。
舉例一:
舉例二:
爬取貼吧。
import urllib.request import urllib.parse def loadPage(url,filename): """ 作用:根據url傳送請求,獲取伺服器響應檔案 url:需要爬取的url地址 filename:處理的檔名 :return: """ print("正在下載"+filename) headers = {"User-Agent" : "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"} request=urllib.request.Request(fullurl,headers=headers) return urllib.request.urlopen(request).read() def writePage(html,filename): """ 作用:將html內容寫入到本地 html:伺服器響應檔案內容 :param html: :return: """ print("正在儲存"+filename) #檔案寫入 with open(filename,"w") as f: f.write(str(html)) print("-"*30) def tiebaSpider(url,beginPage,endPage): """ 作用:貼吧爬蟲排程器,負責組合處理每個頁面的url url:貼吧url的前部分 beginPage:起始頁 endPage:結束頁 :return: """ for page in range(beginPage,endPage+1): pn = (page-1)*50 filename="第" + str (page) + "頁.html" fullurl = url + "&pn=" + str (pn) #print(fullurl) html=loadPage(fullurl,filename) #print(html) writePage(html,filename) print("謝謝使用") if __name__=="__main__": kw = input("請輸入需要爬取的貼吧名:") beginPage = int(input("請輸入起始頁:")) endPage = int(input("請輸入結束頁:")) url = "http://tieba.baidu.com/f?" key = urllib.parse.urlencode({"kw": kw}) fullurl = url + key tiebaSpider(fullurl,beginPage,endPage)