1. 程式人生 > >python:爬取貼吧的某個吧的網頁資訊

python:爬取貼吧的某個吧的網頁資訊

#-*-coding:utf-8-*-
import urllib      #負責url編碼處理
import urllib2
import sys
import os

if sys.getdefaultencoding() != 'utf-8':
    reload(sys)
    sys.setdefaultencoding('utf-8')
def writeFile(html, filename):
    """
        作用:儲存伺服器響應檔案到本地磁碟檔案裡
        html: 伺服器響應檔案
        filename: 本地磁碟檔名
    """
    print "正在儲存" + "D://lianxi"


    with open("D://lianxi//"+filename.encode("GBK"), 'w') as f:
        f.write(html)
    print "-" * 20


def tiebaSpider(url, beginPage, endPage):
    """filename
        作用:負責處理url,分配每個url去傳送請求
        url:需要處理的第一個url
        beginPage: 爬蟲執行的起始頁面
        endPage: 爬蟲執行的截止頁面
    """


    for page in range(beginPage, endPage + 1):
        pn = (page - 1) * 50

        filename = "第" + str(page) + "頁.html"
        # 組合為完整的 url,並且pn值每次增加50
        fullurl = url + "&pn=" + str(pn)
        #print fullurl

        # 呼叫loadPage()傳送請求獲取HTML頁面
        html = loadPage(fullurl, filename)
        # 將獲取到的HTML頁面寫入本地磁碟檔案
        writeFile(html, filename)

def loadPage(url, filename):
    '''
        作用:根據url傳送請求,獲取伺服器響應檔案
        url:需要爬取的url地址
        filename: 檔名
    '''
    print "正在下載" + filename

    headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"}

    request = urllib2.Request(url, headers = headers)
    response = urllib2.urlopen(request)
    return response.read()

# 模擬 main 函式
if __name__ == "__main__":


        kw  = raw_input("請輸入需要爬取的貼吧:")
        # 輸入起始頁和終止頁,str轉成int型別
        beginPage = int(raw_input("請輸入起始頁:"))
        endPage = int(raw_input("請輸入終止頁:"))

        url = "http://tieba.baidu.com/f?"
        key = urllib.urlencode({"kw" : kw})

        # 組合後的url示例:http://tieba.baidu.com/f?kw=lol
        url = url + key
        tiebaSpider(url, beginPage, endPage)

 執行過程:

        
 

執行結果: 


 開啟頁面: