1. 程式人生 > >urllib2預設支援HTTP/HTTPS的GET和POST方法

urllib2預設支援HTTP/HTTPS的GET和POST方法

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)