Python爬取网站gif表情包

 
 

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,json

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

猜你喜欢

转载自blog.csdn.net/zhaogeno1/article/details/78633487