python爬取百度貼吧圖片

# -*- coding: utf-8 -*-

import requests
from lxml import etree
# &pn=50

class Ximage:
    def __init__(self):    
        self.baseurl = "http://tieba.baidu.com/f?kw="  
#        定義主頁url頭部信息
        self.tiebaurl = "http://tieba.baidu.com"
#        定義貼吧主頁url頭部信息
        self.headers={"User-Agent":"Mozilla5.0/"}
        self.page=0
#        圖片個數統計
        self.n=1
#        主頁url拼接用


    def getHtml(self,url):
#       獲取網頁內容
        res = requests.get(url,headers=self.headers)
        res.encoding = "utf-8" 
        html = res.text
        return html
    def getImg(self,url):
#       獲取圖片字節流
        res = requests.get(url,headers=self.headers)
        res.encoding = "utf-8" 
        html = res.content
        return html

    def getBaseUrl(self,html):
#        獲取吧主 url,返回url列表
        parseHtml=etree.HTML(html)
        url_list = parseHtml.xpath('//div[@class="t_con cleafix"]//a[@class="j_th_tit "]/@href')
        return url_list

    def getImgUrl(self,html):
#        獲取吧主圖片url,返回url列表
        parseHtml=etree.HTML(html)
        url_list = parseHtml.xpath('//img[@changedsize="true"]/@src')
        return url_list

    def writePage(self,html,img_url):
#        存儲圖片
#        print(self.n)
#        filename=str(self.n)+".jpg"
        filename=img_url[-10:]

        with open(filename,'wb') as f:
            f.write(html)
            print("寫入第%d個圖片成功" %self.n)
        f.close()
        self.n+=1

    def workOn(self):
#        主函數
        t_name = input("請輸入貼吧名:")
        while True:
            url=self.baseurl+t_name+"&pn="+str(50*self.page)
#            print("貼吧主頁:",url)
            html=self.getHtml(url) #主頁內容
            baseurl_list=self.getBaseUrl(html)#吧主url地址列表
            for i in baseurl_list:
                t_url=self.tiebaurl+i                          
#                print("吧主主頁:",t_url)
                t_html=self.getHtml(t_url) #吧主網頁內容
                img_url_list=self.getImgUrl(t_html)#獲取吧主網頁內容圖片url列表
                for img_url in img_url_list:
#                    print("吧主圖片鏈接",img_url)
                    img_html=self.getImg(img_url)#圖片內容字節流
                    self.writePage(img_html,img_url)#存儲圖片



            print("抓取第一頁成功。")
            c = input("是否繼續抓取y/n:")
            if c.strip().lower()=="y":
                self.page+=1
            else:
                print("爬取結束,謝謝使用")
                break


if __name__ == "__main__":
    x=Ximage()
    x.workOn()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章