1. 程式人生 > >初涉爬蟲時的requests庫---爬取貼吧內容

初涉爬蟲時的requests庫---爬取貼吧內容

requests庫在爬蟲的實踐開發運用中較為常用,實現HTTP請求協議時方法簡單,操作方便,易於實現。對於一般的靜態網頁,都可以方便抓取想要的內容,比起scrapy等框架有明顯的優勢,爬取定向的簡單內容,是極好的。

下面就是運用requests模組,實現一個簡單的爬取貼吧網頁的爬蟲程式。該栗子建立一個類,方便有需要時直接呼叫繼承。

閒言少敘,上菜!!!接程式碼!!! 

看著程式碼挺多,去掉註釋,所剩無幾,這也是python魅力所在,哈哈哈!!!

import requests
class Tiebaspider:
    def __init__(self,tieba_name_crawl):
        #初始化必要引數,完成基礎的設定
        #貼吧名稱
        self.tiebaname = tieba_name_crawl
        #種子連結 
        self.url_base = 'https://tieba.baidu.com/f?kw='+ tieba_name_crawl +'&ie=utf-8&pn={}'
        #請求頭資訊 
        self.hearders  = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0'}

    #獲得要的頁面下載列表
    def make_list_down(self):
        #列表生成式  返回值是下載連結,帶有頁碼
        # return [self.url_base.format(i) for i in range(3)]
        #注意注意注意!!!貼吧的原始碼HTML是50條翻一頁,pn=50,想要獲得第二頁pn值要大於50,依次類推
        return [self.url_base.format(i) for i in [0,55,102]]

    #獲得下載的頁面內容
    def download_url(self,url_str):
        #獲得頁面請求響應   使用request.get方法下載指定頁面,並返回頁面的結果
        #url_str下載連結
        result = requests.get(url_str,headers =self.hearders)
        # print(result.text)
        #返回下載的頁面內容
        return result.content
    #儲存下載的內容
    def save_result(self,result,page_num):
    #路徑(相對/絕對都可以)
        file_path = 'D:/4spider/spider_review02/review02/download2/{}--第{}頁.html'.format(self.tiebaname,page_num)
        with open(file_path,'wb') as f:
            f.write(result)

#執行邏輯,程式執行的順序
    def run(self):
        #呼叫make_list_down()方法
        url_list = self.make_list_down()
        #url_str在url_list中  迴圈遍歷
        for url_str in url_list:
            #呼叫download_url() 方法
            result_str = self.download_url(url_str)
            #頁碼 索引值在獲得的頁碼列表中 迴圈加1
            p_num = url_list.index(url_str) + 1
            #呼叫save_result()方法儲存,儲存下載的頁面
            self.save_result(result_str,p_num)

if __name__ =="__main__":
#“李毅”要爬取的貼吧名稱
    tieba_spider = Tiebaspider("李毅")
    tieba_spider.run()

注意點:::

     1.學好爬蟲的前提HTML頁面要666,對css,js,json,ajax等前端頁面的知識要會分析;比如此例中,要對貼吧原始碼進行分析,檢視下一頁的樣式,不然無法實現翻頁功能,也就是隻能獲得第一頁;

     2.分析這種簡單爬蟲時,要從run方法入手,它是程式的主要實現邏輯;

    3.儲存的路徑必須是程式能夠找到的路徑;

    4.最好運用面向物件的方法來解決問題,建立類,封裝函式,也就是造輪子,方便下次要實現類似的需求時,作為參考。