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()

你可能感兴趣的:(爬虫)