Python爬取网站gif表情包

来源:互联网 发布:云南师范大学网络缴费 编辑:程序博客网 时间:2024/05/16 02:14

Python 版本为2.7.13   IDE工具Pycharm 爬取网站:腾牛网

腾牛网属于一个比较简单的网站,就是单纯的查看网站源码,再根据网站的基本信息,提取gif表情包的下载地址,然后按各个主体分类保存

以下为效果图

1.首先,打开腾牛网站

http://www.qqtn.com/bq/dtbq_1.html
爬取内容为动态表情列表里面的表情包
2.右键查看网页源码
很明显要爬取的内容在一个<div class="g-list-left m-fl">中,直接用geta()函数,利用正则表达式获取,然后再获取每一条url
3.上面获取的网址,每一条都点击去都会有相对应的主题的表情包,然后通过getb()函数获取具体的gif地址和文件夹名称
4.将获取的gif通过savegif()保存在本地目录下
5.通过一个for循环,可以根据本身需求获取特定的网页的表情包,或者直接就获取网站中40个页面的表情包

# -*- coding: utf-8 -*-__author__ = 'zhao'__date__ = '2017/11/24 11:03'import re,time,requests,os,jsonclass Imagegif(object):    def __init__(self):        self.session = requests.Session()# 运行程序    def run(self, url):        # 1.先获取整个页面        url2 = self.geta(url)        # 2.逐一获取套图        for url2 in url2:            # 进入第二层网页            url = 'http://www.qqtn.com%s' %(url2)            url2 = self.getb(url)            # 保存图片            self.savegif(url2)# 下载页面    def download(self, url):        try:            # 获取页面            response = self.session.get(url)            # 根据页面信息调整适当的编码            response.encoding = 'gb2312'            # 返回页面            return response        except Exception as e:            print e# 获取整个页面的套图url    def geta(self,url):        # 将页面的显示出来        data1 = self.download(url).text        if data1:            # 先筛选出一块区域            fir = re.findall(r'<div class="g-list-left m-fl">.*?<div class="tspage">', data1, re.S)            # 再筛选出具体网址            fir2 = re.findall(r'/article/.*?html', str(fir))            return fir2        else:            print u"获取不到第一层网站"# 获取一组套图的全部gif    def getb(self, url):        data1 = self.download(url).text        if data1:            # 获取一块区域,re.S多行获取            fir = re.findall(r'<div id="zoom" class="m_qmview">.+?</div>', data1, re.S)            # 获取标题            name = re.findall(r'<h1>.*?</h1>', data1)            # 将标题提取出来            name = str(name).replace('<h1>', '').replace('</h1>', '')            # 提取gif网址            fir2 = re.findall(r'up.*?gif', str(fir))            # 将标题添加到列表中            fir2.append(name)            return fir2        else:            print u'获取不到第二层网站'# 保存gif表情包# 保存图片    def savegif(self, url2):        dir_name = url2[-1]        url2.remove(dir_name)        # 将字符串中的[u'']转为unicode        dir_name = str(dir_name).replace('[u','').replace('\'','').replace(']','')        # unicode反转码为中文        s = r'%s' % (dir_name)        dir_name = s.decode('unicode_escape')        print dir_name        if not os.path.exists(dir_name):            os.makedirs(dir_name)        il = 0        for url3 in url2:            il = il + 1            url = 'http://www.qqtn.com/%s' % (url3)            pix = url.split('/')[-1].split('.')[-1]            img_name = dir_name + str(il)            print img_name            img_path = os.path.join(dir_name, "%s.%s" % (img_name, pix))            if not os.path.exists(img_path):                response = self.download(url)                # 打印图片地址                print(url)                if response:                    # 返回图片二进制内容                    img_data = response.content                    # 存储图片                    with open(img_path, 'wb') as f:                        f.write(img_data)if __name__ == '__main__':    spider = Imagegif()
#该网站有40个页面,可根据自身需求爬取    for i in xrange(1,3):        url = 'http://www.qqtn.com/bq/dtbq_%s.html' % i # i为爬取的具体页面        spider.run(url)

原创粉丝点击