Python爬虫实战(5)斗图啦表情包下载(单线程)

  • 网页分析
  • 代码
    • 注意事项
      • 文件名的中文标点
      • 文件后缀os.path.splitext
      • 网页反爬虫
  • 输出结果
  • 总结

利用BeautifulSoup requests库和urllib库,实现斗图啦的表情包下载

运行平台: Windows
Python版本: Python 3.8
IDE: Pycharm

基本思路:分析网页得到表情包的url和名称,然后利用urllib下载图片并用得到的名称作为文件名.

网页分析

斗图啦 http://www.doutula.com/photo/list/?page=1

       所有的表情包都放在div中的各个a class=“col-xs-6 col-sm-3”,中的img标签属性的data-original(表情包url)和alt(名称).

代码

# 使用单线程下载表情包
import requests
import time
import os  # 用于导入文件后缀名
from urllib import request  # 用于下载
from bs4 import BeautifulSoupdef parser_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36','Host': 'www.doutula.com'}t1 = time.time()response = requests.get(url, headers=headers).textbs = BeautifulSoup(response, 'html.parser')images = bs.find_all('a', class_='col-xs-6 col-sm-3')for image in images:img0 = image.find_all('img')[-1]img = img0.get('data-original')title = img0.get('alt')# 防止一些中文标点符号做文件名时会出错,替换成''title = title.replace(',', '').replace('?', '').replace('!', '')suffix = os.path.splitext(img)[1]  # 得到文件的后缀filename = title + suffixprint(filename, '\t', '下载完成!')# request.urlretrieve(img, 'images/' + filename) # 直接使用会被反爬虫限制# 用于网页的反爬虫opener = request.build_opener()opener.addheaders = [headers]request.install_opener(opener)request.urlretrieve(img, 'images/' + filename)time.sleep(0.5)t2 = time.time() - t1print('\n', '耗时:', t2, 's')def main():for i in range(1, 2):  # 下载的表情包页数url0 = 'http://www.doutula.com/photo/list/?page='url = url0 + str(i)parser_page(url)if __name__ == '__main__':main()

注意事项

文件名的中文标点

因为从alt属性得到名称中很多都带有中文标点符号如 ? ! , ,它们无法当作文件名,所以要把它替换成空白.

title = title.replace(',', '').replace('?', '').replace('!', '')
可以用正则表达式来实现.

文件后缀os.path.splitext

os.path.splitext可以实现将文件名和拓展名分开,如下:

os.path.splitext('/home/ubuntu/python/example.py')('/home/ubuntu/python/example', '.py')

网页反爬虫

如果直接使用request.urlretrieve下载图片,因为里面没有headers信息所以很容易被网页发现是爬虫,从而禁止访问,如下:

request.urlretrieve(img, 'images/' + filename)urllib.error.HTTPError: HTTP Error 403: Forbidden

可以使用下面的方法:

opener = request.build_opener()
opener.addheaders = [headers]
request.install_opener(opener)
request.urlretrieve(img, 'images/' + filename)

输出结果

我生气了.jpg      下载完成!
坏龙.jpg   下载完成!
吃东西中.gif     下载完成!
嘻嘻.jpg   下载完成!
疑问墨镜熊猫.jpg   下载完成!
我靠看不下去了.gif      下载完成!
短发胖虎.jpg     下载完成!
点赞哦.jpg      下载完成!
歪脑袋.jpg      下载完成!
又到了溜狗群主时间.jpg    下载完成!
我特么.png      下载完成!
你们不吃饭吗.png   下载完成!
涂口红.jpg      下载完成!
无敌伞.jpg      下载完成!
胖虎尴尬了.jpg    下载完成!
灭了你我就能睡着了.gif    下载完成!
左边儿右边儿摇摇头.jpg    下载完成!
我不想被劝退我饭卡里还有好多钱呢.jpg     下载完成!
闭嘴寡妇.jpg     下载完成!
在你胸囗上比划富城.jpg    下载完成!
我看你是土狗吃屎打饱嗝.jpg      下载完成!
在你右边儿再画个龙.jpg    下载完成!
帅哥伞.jpg      下载完成!
那我告诉你吧我变得更爱你了.jpg    下载完成!
你家死一户口本.jpg      下载完成!
我给你变一个魔术.jpg     下载完成!
不说了要去搬砖了.jpg     下载完成!
呆滞.jpg   下载完成!
狗管理你老婆寂寞吗.jpg    下载完成!
变完了看到了吗.jpg      下载完成!
假装去世.jpg     下载完成!
错是娶我.jpg     下载完成!
注意你的言辞小智障.jpg    下载完成!
下次你来我家.jpg   下载完成!
我是一只小绵羊你可以给我草吗.png   下载完成!
瘦了.jpg   下载完成!
大声的告诉你.jpg   下载完成!
您不配.jpg      下载完成!
我可能是假….面骑士.jpg   下载完成!
看我的手表是夜光的.jpg    下载完成!
拽到被窝里.jpg    下载完成!
您配.jpg   下载完成!
用被子蒙住咱俩的头.jpg    下载完成!
四可我你仙人板板.jpg     下载完成!
深情的告诉你.jpg   下载完成!
狗日的生活.jpg    下载完成!
我这一个响指下去每个人都要少一个睾丸.jpg   下载完成!
可是这并不能让蟹老板交出他的秘方.jpg     下载完成!
老子戴这么大的眼镜都看不透你这个憨批.jpg   下载完成!
估摸这个点你也该想我子.jpg      下载完成!
滚开狗杂种你妈的坟墓出门左转.jpg   下载完成!
你可能会先死.jpg   下载完成!
请尊重我.jpg     下载完成!
物理超度.jpg     下载完成!
原来我就是桥本环奈啊.jpg   下载完成!
嬲得你恩婆还不是.jpg     下载完成!
带我吃鸡好不好嘛.jpg     下载完成!
小骚货.jpg      下载完成!
啪(小黄鸡).jpg     下载完成!
你脑子是进胡萝北了吗.jpg   下载完成!
对方不想和你说话并且向你投掷了一套女装。.jpg     下载完成!
啪你死了.jpg     下载完成!
哇是萝莉控.jpg    下载完成!
我真的很快乐.jpg   下载完成!
乡下人的目光.null      下载完成!
我爱你妈妈.jpg    下载完成!
谁他妈买小米.png   下载完成!
刀不锋利马太瘦我还不想和你斗.jpg   下载完成!耗时: 126.40596842765808 s

总结

这是使用单线程下载的表情包,速度会较慢,待我完成多线程的表情包下载代码后,会把链接放在下面做一个速度和代码的对比!

Python爬虫实战(5)斗图啦表情包下载(单线程)相关推荐

  1. 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!

    最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...

  2. Python多线程爬取斗图啦表情包

    斗图啦表情包多线程爬取-撸代码 首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os模块 import asyncio import aiohttp ...

  3. Python爬虫 | 斗图网表情包抓取

    Python爬虫 | 斗图网表情包抓取 1.数据来源分析 2.制作div_list 3.发起请求 4.保存图片 5.批量获取 6.完整代码 声明 1.数据来源分析   打开斗图吧的主页,发现网址非常有 ...

  4. python表情包斗图_Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

  5. 爬虫笔记——多线程爬取斗图网表情包(threading)

    爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...

  6. 10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了

    10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了 1. 依赖模块及安装 2. 查找网页规律 3. 源码 最近看的爬虫的博客太多,小小的学习了下.主 ...

  7. 小程序源码:聊天斗图微信表情包

    这是一款微信表情包小程序 支持自定义搜索,另外支持长按发送给好友 当然也支持长按保存表情包 这个源码比较单调一点,没有那么多的分类 小程序源码下载地址: 小程序源码:聊天斗图微信表情包-小程序文档类资 ...

  8. 小程序源码:聊天斗图微信表情包-多玩法安装简单

    这是一款微信表情包小程序 支持自定义搜索,另外支持长按发送给好友 当然也支持长按保存表情包 这个源码比较单调一点,没有那么多的分类 小程序源码下载地址: 小程序源码:聊天斗图微信表情包-多玩法安装简单 ...

  9. python爬虫图片实例-【图文详解】python爬虫实战——5分钟做个图片自动下载器...

    我想要(下)的,我现在就要 python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识(没看的赶紧去看)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk ...

最新文章

  1. 水晶报表调用存储过程的问题
  2. hadoop错误之ClassNotFoundException
  3. 关于Lambda和匿名内部类
  4. PyTorch实战福利从入门到精通之四——卷积神经网络CIFAR-10图像分类
  5. lua mysql 事务_为什么在 Redis 实现 Lua 脚本事务?-阿里云开发者社区
  6. 编写有效用例_阅读笔记03
  7. 图标圆角角度_教你在 iOS 和 macOS 上获取 App 图标
  8. SAP学习记__物料管理(MM)模块__采购入库冲销、退货
  9. 阶乘的传统流程图 c语言,C语言算法与流程图.ppt
  10. 电脑壁纸软件(Bing Wallpaper)
  11. 策略路由(本地策略和接口策略)
  12. 5 开源Math.NET基础数学类库使用 C#解析Delimited Formats数据格式
  13. Python常见面试题汇总(根据面试总结)
  14. 路由器连接上但上不了网原因及解决方法
  15. 【Python编程】三步完成如何从视频中提取音频?
  16. Python绘制气象风场
  17. oracle 如何查看监听,[转载]查看oracle监听器的状态及打开监听器服务
  18. 【富文本】CodeBlocks最新版20.03+汉化包云盘下载及用法
  19. SVPWM控制技术+Matlab/Simulink仿真详解
  20. python脱离环境运行_python 生成exe脱离python环境运行

热门文章

  1. python调试神器!今天你吃冰淇淋了吗?
  2. 一篇文章告诉你,金三银四准备找软件测试工作时,需要准备什么?
  3. Android 浅尝Tinker微信热修复
  4. 分治法--归并排序算法
  5. Fikker 站长缓存的授权期内但显示授权过期问题
  6. 数据库查询及事务管理
  7. oppo find x3和x3pro外观区别 oppo find x3和x3pro参数对比哪个性价比高
  8. 笔记本电脑键盘帽坏掉了
  9. 嵌入式C语言自我修养 (04):Linux 内核第一宏:container_of
  10. VS中MessageBox与AfxMessageBox用法与区别