由于不经常看群消息,收藏的表情包比较少,每次在群里斗图我都处于下风,最近在中国大学MOOC上学习了嵩天老师的Python网络爬虫与信息提取课程,于是决定写一个爬取网上表情包的网络爬虫。通过搜索发现站长素材上的表情包很是丰富,一共有446页,每页10个表情包,一共是4000多个表情包,近万个表情,我看以后谁还敢给我斗图

技术路线

requests+beautifulsoup

网页分析

站长素材第一页表情包是这样的:

可以看到第一页的url是:http://sc.chinaz.com/biaoqing/index.html

点击下方的翻页按钮可以看到第二页的url是:http://sc.chinaz.com/biaoqing/index_2.html

可以推测第446页的url是:http://sc.chinaz.com/biaoqing/index_446.html

接下来是分析每一页表情包列表的源代码:

再来分析每个表清包全部表情对应的网页:

步骤

1、获得每页展示的每个表情包连接和title

2、获得每个表情包的所有表情的链接

3、使用获取到的表情链接获取表情,每个表情包的表情放到一个单独的文件夹中,文件夹的名字是title属性值

代码

#-*-coding:utf-8-*-
'''
Created on 2017年3月18日
@author: lavi
'''
import bs4
from bs4 import BeautifulSoup
import re
import requests
import os
import traceback
'''
获得页面内容
'''
def getHtmlText(url):try:r = requests.get(url,timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""
'''
获得content
'''
def getImgContent(url):head = {"user-agent":"Mozilla/5.0"}try:r = requests.get(url,headers=head,timeout=30)print("status_code:"+r.status_code)r.raise_for_status()return r.contentexcept:return None'''
获得页面中的表情的链接
'''
def getTypeUrlList(html,typeUrlList):soup = BeautifulSoup(html,'html.parser')divs = soup.find_all("div", attrs={"class":"up"})for div in divs:a = div.find("div", attrs={"class":"num_1"}).find("a")title = a.attrs["title"]typeUrl = a.attrs["href"]typeUrlList.append((title,typeUrl))
def getImgUrlList(typeUrlList,imgUrlDict):for tuple in typeUrlList:title = tuple[0]url = tuple[1]title_imgUrlList=[]html = getHtmlText(url)soup = BeautifulSoup(html,"html.parser")#print(soup.prettify())div = soup.find("div", attrs={"class":"img_text"})#print(type(div))imgDiv = div.next_sibling.next_sibling#print(type(imgDiv))imgs = imgDiv.find_all("img");for img in imgs:src = img.attrs["src"]title_imgUrlList.append(src)imgUrlDict[title] = title_imgUrlList
def getImage(imgUrlDict,file_path):head = {"user-agent":"Mozilla/5.0"}countdir = 0for title,imgUrlList in imgUrlDict.items():#print(title+":"+str(imgUrlList))try:dir = file_path+titleif not os.path.exists(dir):os.mkdir(dir)countfile = 0for imgUrl in imgUrlList:path = dir+"/"+imgUrl.split("/")[-1]#print(path)#print(imgUrl)if not os.path.exists(path):r = requests.get(imgUrl,headers=head,timeout=30)r.raise_for_status()with open(path,"wb") as f:f.write(r.content)f.close()countfile = countfile+1print("当前进度文件夹进度{:.2f}%".format(countfile*100/len(imgUrlList)))countdir = countdir + 1print("文件夹进度{:.2f}%".format(countdir*100/len(imgUrlDict)))except:print(traceback.print_exc())#print("from getImage 爬取失败")def main():#害怕磁盘爆满就不获取全部的表情了,只获取30页,大约300个表情包里的表情pages = 30root = "http://sc.chinaz.com/biaoqing/"url = "http://sc.chinaz.com/biaoqing/index.html"file_path = "e://biaoqing/"imgUrlDict = {}typeUrlList = []html = getHtmlText(url);getTypeUrlList(html,typeUrlList)getImgUrlList(typeUrlList,imgUrlDict)getImage(imgUrlDict,file_path)for page in range(pages):url = root + "index_"+str(page)+".html"imgUrlDict = {}typeUrlList = []html = getHtmlText(url);getTypeUrlList(html,typeUrlList)getImgUrlList(typeUrlList,imgUrlDict)getImage(imgUrlDict,file_path)main()

结果



如果你在群里斗图吃了亏,把上面的程序运行一遍。。。不要谢我,3月是学雷锋月。哈哈,来把我们斗会图,

Python网络爬虫爬取站长素材上的表情包相关推荐

  1. Python:网络爬虫爬取某表情包网站

    Python:网络爬虫爬取某表情包网站 参考: 爬虫基础知识点汇总(html文件基础和4个常用库 超级详细长文预警) [爬虫教程]吐血整理,最详细的爬虫入门教程~ HTML的简单介绍 HTML的全称为 ...

  2. 用python网络爬虫爬取英雄联盟英雄图片

    用python爬虫爬取lol皮肤. 这也用python网络爬虫爬取lol英雄皮肤,忘了是看哪个大神的博客(由于当时学了下就一直放在这儿,现在又才拿出来,再加上马上要考二级挺忙的.),代码基本上是没改, ...

  3. 使用python网络爬虫爬取新浪新闻(一)

    使用python网络爬虫爬取新浪新闻 第一次写博客,感觉有点不太习惯!不知道怎么突然就想学学爬虫了,然后就用了一天的时间,跟着教程写了这个爬虫,!不说废话了,我将我从教程上学习的东西整个写下来吧,从头 ...

  4. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  5. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  6. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  7. Python网络爬虫爬取虎扑步行街爆照区话题

    Python网络爬虫爬取虎扑步行街爆照区话题 作者:郜科科 最近的任务挺多的,但是心情很烦躁,想做一些自己喜欢的东西,前些时候感觉Python爬虫很好玩,就自学了一下.本人比较喜欢逛街--虎扑步行街, ...

  8. python如何爬虫网页数据-python网络爬虫爬取网页内容

    1.什么是网络爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自 ...

  9. python网络爬虫——爬取嗅事百科

    网络爬虫 - 爬取嗅事百科 爬取过程分三大步: 一,请求,获取网页源码 url为:url =' https : //www.qiushibaike.com/8hr/page/'+ str(page)先 ...

  10. python全网表情包_Python爬虫爬取最右公众号表情包资源

    某天上厕所刷手机,看到最右公众号里面有一个表情包资源合集 点进去发现有70多期表情包,突然就想到了最近学的爬虫,立马跑回去打开电脑准备看能不能全部爬下来. 我的想法是先找到这70多期的url链接,然后 ...

最新文章

  1. Lync Server 2010移动功能部署PART B:外部篇
  2. nginx php 跨域访问权限,nginx + php 实现跨域请求填坑笔记
  3. CODING 受邀参加《腾讯全球数字生态大会》
  4. 显微镜下的大明内容_平凡故事展现炮火下人性光辉,李少红《解放·终局营救》创作全解...
  5. coreldraw登录老是出现未知错误_原神:新版本bug频出,史莱姆消失,联机模式提示506错误码...
  6. HDU2079 选课时间【母函数】
  7. 历年全国计算机二级c语言真题,历年全国计算机二级C语言真题
  8. 接口测试用例设计方法
  9. apache 支持apk下载安装
  10. ID3算法的Python实现
  11. 韦根读卡电路c语言程序,私人项目开源 — 低成本125K RFID读卡模块(原理图+PCB+代码+调试)...
  12. Kali Linux系统安装
  13. 《算法导论3rd第一章》算法在计算中的作用
  14. shell计算命令:let命令详解
  15. leetcode每日一题1725. 可以形成最大正方形的矩形数目 哈希表存储 到 贪心遍历 优化~
  16. data单复数一样吗_data和datum谁是单数形式,谁是复数形式?
  17. Django 配置数据库相关
  18. 销售人员应关注的 5 个指标
  19. 浅谈数据分析、大数据分析和大数据开发的区别
  20. 第三次作业—唐洁、陈小丽

热门文章

  1. 2022年蓝桥杯C++B组(超详解)
  2. 计算机派位能选到好学校吗,2021年幼升小 | 关于电脑派位,你真的弄清楚了吗?...
  3. 物联网行业新突破:UWB人员定位技术已成功应用于各个领域!
  4. js实现无缝无限循环轮播图片
  5. 批量修改文件名 python实现
  6. [python爬虫之路day13]:多线程——加速爬取数据
  7. 安装pytorch(千万不要去掉 -c pytorch,安装n次后的教训)
  8. silverlight文件下载
  9. YOLOV5目标识别数据集采集、标定和准备_Python爬虫爬取目标图片_xml转txt(消防栓为例)
  10. 腾讯IEG后台开发实习二面