本次目的:

python爬取海量表情包

亮点:

  1. 系统分析目标网页
  2. html标签数据解析方法
  3. 海量图片数据一键保存

环境介绍:

  • python 3.8
  • pycharm

模块使用:

  • requests >>> pip install requests
  • parsel >>> pip install parsel

相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以点击领取

模块安装问题:

如果安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
  2. 在pycharm中点击Terminal(终端) 输入安装命令

安装失败原因:

失败一:

pip 不是内部命令

解决方法:

设置环境变量

失败二:

出现大量报红 (read time out)

解决方法:

因为是网络链接超时, 需要切换镜像源
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名

失败三:

cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

解决方法:

可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好
或者你pycharm里面python解释器没有设置好

如何配置pycharm里面的python解释器?

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  2. 点击齿轮, 选择add
  3. 添加python安装路径

pycharm如何安装插件?

  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)
  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation
  3. 选择相应的插件点击 install(安装) 即可
  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效

爬虫基本思路流程:

一. 数据来源分析

  1. 确定要获取的内容 (确定需求)
    发表情网站的表情包图片
  2. 通过开发者工具抓包分析 数据(图片url地址以及图片标题)来源
    可以知道发表情这个网站是静态网页, 我们想要的数据内容都是来自他网页源代码

二. 代码实现步骤:

  1. 发送请求, 对于表情包列表页面发送请求
  2. 获取数据, 获取服务器返回的数据内容(response响应体数据)
  3. 解析数据, 提取我们想要数据内容 (图片url地址 以及 图片标题)
  4. 保存数据, 把获取下来的内容保存本地的文件夹里面
  5. 多页爬取, 根据请求url地址的变化规律

代码

导入模块

import requests  # 数据请求模块 第三方模块 pip install requests  安装好之后没有使用模块 灰色显示
import parsel # 数据解析模块 第三方模块 pip install parsel
import re # 正则表达式 内置模块 不需要安装
# 1. 发送请求
# 需要注意点: 确定请求url地址 请求方法 请求头参数(某些网站需要加cookie 或者 防盗链)
for page in range(12, 21):print(f'正在爬取第{page}页数据内容')url = f'https://fabiaoqing.com/biaoqing/lists/page/{page}.html'# headers 作用伪装python代码的   爬虫是模拟浏览器对于服务器发送请求headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'}response = requests.get(url=url, headers=headers)# 2. 获取数据, 获取服务器返回的数据内容(response响应体数据) response.text 获取响应体文本数据# 3. 解析数据 提取内容, 是要根据服务器返回的数据, 而不是看元素面板# print(response.text) # 得到的response.text  这个html字符串数据 直接提取字符串数据内容 需要用re正则表达式selector = parsel.Selector(response.text) # 把得到的字符串数据内容 转换成 selector 对象# css选择器 就是根据标签属性内容提取数据divs = selector.css('div.ui.segment.imghover div') # 获取所有div标签 返回对象for index in divs:# a::attr(title) 获取a标签里面 title 属性 数据 get() 获取第一个标签数据内容title = index.css('a::attr(title)').get()title = re.sub(r'[\/:*?"<>|\n]', '', title)img_url = index.css('img::attr(data-original)').get()# split 字符串分割的方法 列表[-1] 取最后一个元素 右边的第一个元素img_name = img_url.split('.')[-1]# response.content 获取二进制数据内容, 保存图片/视频/音频/特定格式的文件内容 都是以二进制数据保存img_content = requests.get(url=img_url, headers=headers).contentwith open('img\\' + title + '.' + img_name, mode='wb') as f:f.write(img_content)print(title, '保存成功')

多线程代码

import re
import time
import requests
import parsel
import concurrent.futuresdef change_title(title):mode = re.compile(r'[\\\/\:\*\?\"\<\>\|\n]')new_title = re.sub(mode, '_', title)return new_titledef get_response(html_url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',}response = requests.get(url=html_url, headers=headers)return responsedef save(name, title, img_url):img_content = get_response(img_url).contentwith open('img\\' + title + '.' + name, mode='wb') as f:f.write(img_content)print('正在保存:', title)def main(html_url):html_data = get_response(html_url).textselector = parsel.Selector(html_data)divs = selector.css('#container div.tagbqppdiv')for div in divs:title = div.css('img::attr(title)').get()img_url = div.css('img::attr(data-original)').get()name = img_url.split('.')[-1]new_title = change_title(title)if len(new_title) > 255:new_title = new_title[:10]save(name, new_title, img_url)else:save(name, new_title, img_url)if __name__ == '__main__':start_time = time.time()exe = concurrent.futures.ThreadPoolExecutor(max_workers=7)for page in range(1, 201):url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'exe.submit(main, url)exe.shutdown()use_time = int(time.time()) - int(start_time)print(f'总计耗时:{use_time}秒')

【python实战】批量采集表情包,群里发表情你绝对独领风骚~相关推荐

  1. 为什么要学python表情包_Python自动生成表情包,Python在手,从此斗图无敌手!

    在开工之前,先让我们瞻仰膜拜一下表情包界里程碑式的人物,感谢他们大力推动了表情包在历史潮流中的显著进步,他们的英名将长期被人民大众津津乐道,他们的音容笑貌将在人们的日常社交中经久不衰,他们的卓越贡献将 ...

  2. 人生苦短我学python表情包_Python自动生成表情包

    原标题:Python自动生成表情包 源| 创业智库文| 唐一 作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态-- ...

  3. python制作会动的表情包_Python自动生成表情包,python在手,从此斗图无敌手

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  4. python制作会动的表情包_Python自动生产表情包

    作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!!!! 表情包不仅仅是一种符号,更是一种文化--是促进社交 ...

  5. python制作会动的表情包_Python自动生成表情包

    分享一篇好玩的文章,原文链接:Python自动生产表情包. 作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--- ...

  6. python 枪表情包_Python自动生成表情包,python在手,从此斗图无敌手

    作为一个数据分析师,应该信奉一句话----"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!! 表情包不仅仅是一种符号,更是一种文化:是促 ...

  7. python 枪表情包_Python自动生成表情包 Python在手 从此斗图无敌手

    作者 | Python雁横 如需转载,请联系原作者授权 作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!! ...

  8. Python实现批量采集美女视频<无水印>

    前言 嗨嗨,大家下午好 ~ 我又来给你们送福利了嘿嘿 今天教你们如何用python实现批量采集美女视频 ~ 小声说:这次还有视频教程! 目录(可自行点击想去的地方) 前言 环境使用 模块使用: 按照常 ...

  9. python爬表情包_教你用Python来爬取表情包网站的所有表情图片

    教你用Python来爬取表情包网站的所有表情图片 配置环境 安装Python 开发环境 3X系列 win + R 打开运行,输入cmd,输入python,进行验证是否安装Python win + R ...

最新文章

  1. iOS开发 关于启动页和停留时间的设置
  2. 下载和安装Nginx之配置选项
  3. wxWidgets:子类化Subclassing WxControl
  4. postman发送HTTP请求自动生成MD5签名
  5. 一亿像素下放!Redmi Note 10系列相机曝光:长焦微距全都有
  6. 【Hadoop】伪分布式安装---MapReduce程序运行到YARN上,编写MapReduce程序---HDFS yarn
  7. 一起谈.NET技术,ASP.NET MVC 3 Beta初体验之超酷的Chart
  8. 局域网SDN技术硬核内幕 一 分布式任意播网关
  9. 【博学谷学习记录】超强总结,用心分享 | 产品经理电商项目知识点总结与回顾
  10. composite-id class must implement Serializable
  11. 荐《别做正常的傻瓜》
  12. Excel如何实现行列转换及行倒置
  13. ES系列:Cluster state has not been recovered yet, cannot write to the [null] index
  14. CA服务器的搭建和申请证书
  15. 米家和苹果HomeKit更推荐哪个,各自的优缺点如何?
  16. html meta标签的常用写法
  17. xp系统怎么添加wifi连接服务器,XP系统怎么连接无线路由器
  18. leetcode (Image Smoother)
  19. 【表白程序】盛开的玫瑰代码
  20. 【第39题】位与 的应用 | 一句话消除末尾连续的 1

热门文章

  1. 4个寓言故事,看懂非授权频谱监管
  2. 薪资25k,我从字节跳动离职了...
  3. Retrofit+多线程下载
  4. windows server2012 开启mysql远程访问
  5. 【XSY2668】排列统计 DP
  6. pg mysql 联表查询_postgresql多表查询语句优化
  7. c++基础:之泛型与标准模板库
  8. JS关闭窗口时触发事件方法
  9. python标准库math中用来实现上取整_python中取整
  10. 移动端Android真机上 scrollTop一直为0的解决方案