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)