别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境相关的知识,希望能为你提供帮助。
文章图片
我们现在聊天的时候,总会动不动就开启斗图大会,你有没有陷入无图可发的窘境呢,现在我就带着你解决这个问题。1、介绍
- 平台:斗图啦
- 语言:?
?python?
? - 技术:?
?python?
??多线程、??python?
??安全队列、??python?
??之??Xpath?
??、正则、??request?
?
2、python爬取流程梳理我们刚开始学习的时候,是不是每次都需要梳理下爬取的流程呢,那么这次咱们还是和之前一样,首先我们需要找到我们爬取的平台的网址是什么:
https://dou.yuanmazg.com/doutu?page=1
访问这个界面之后,我们可以看到如下显示的内容:
文章图片
然后我们往下滑之后,可以看到这里一共有1500+的页面,那么我们现在爬取前50页的内容吧,大概流程我觉得应该如下哈:
- 获取每个页面的?
?url?
?; - 将获取到的?
?url?
??放置??Queue?
?中; - 从?
?Queue?
??中获取一个??Url?
??,使用??requests?
??获取内容,使用??xpath?
??获取取该??Url?
??中每一个图片的??Url?
?; - 然后将每个图片中的?
?Url?
??放入到另一个??Queue?
?中; - 然后再从第二个?
?Queue?
??中获取图片的??url?
?; - 根据?
?Queue?
?来下载并保存即可; - 以上步骤我们使用多线程+?
?Queue?
?的形式来进行。
老样子,首先我们简简单单写一个框架;
import threading
class Producter(threading.Thread):
pass
class Consumer(threading.Thread):
pass
def main():
pass
if __name__ == __main__:
main()
然后我们一步一步进行;
3.2 初步获取页面有效信息
import requests
from lxml import etree
Url = https://dou.yuanmazg.com/doutu?page=1
Header = user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Page_get = requests.get(url=Url, headers=Header)
Page_content = Page_get.text
Page_message = etree.HTML(Page_content)
Page_div = Page_message.xpath(//div[@class="page-content"])[0]
Page_div = etree.tostring(Page_div, pretty_print=True, method=html).decode(utf-8)
print(Page_div)
3.3 提取每一个图片的?
?url?
??和??name?
?import requests
from lxml import etree
Url = https://dou.yuanmazg.com/doutu?page=1
Header = user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Page_get = requests.get(url=Url, headers=Header)
Page_content = Page_get.text
Page_message = etree.HTML(Page_content)
Page_div = Page_message.xpath(//div[@class="page-content"]//a//img)
# Page_div = etree.tostring(Page_div, pretty_print=True, method=html).decode(utf-8)
# print(Page_div)
for i in Page_div:
# print(etree.tostring(i, pretty_print=True, method=html).decode(utf-8))
Page_url = https://dou.yuanmazg.com + i.xpath("@data-original")[0]
Page_name = i.xpath("@alt")[0]
print(Page_url)
print(Page_name)
输出结果如下:
文章图片
3.4 优化名字
我们可以看到我们获取的图片的名字中有特殊符号,但是我们的电脑上文件名字是不可以出现特殊符号的,那么我们是不是就需要把名字给他处理一下呢,优化走起,优化之后的代码如下:
import requests
from lxml import etree
import re
Url = https://dou.yuanmazg.com/doutu?page=1
Header = user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Page_get = requests.get(url=Url, headers=Header)
Page_content = Page_get.text
Page_message = etree.HTML(Page_content)
Page_div = Page_message.xpath(//div[@class="page-content"]//a//img)
# Page_div = etree.tostring(Page_div, pretty_print=True, method=html).decode(utf-8)
# print(Page_div)
for i in Page_div:
# print(etree.tostring(i, pretty_print=True, method=html).decode(utf-8))
Page_url = https://dou.yuanmazg.com + i.xpath("@data-original")[0]
Page_name = i.xpath("@alt")[0]
Page_name = re.sub(r[,。??,/\\\\·\\*\\ ], , Page_name)
print(Page_url)
print(Page_name)
随之我们又发现了另一个问题,那就是有些图片他是没有添加描述的,也就是无法获取该图片的名字,那么我们就随机给他一个名字吧;
import requests
from lxml import etree
import re
import random
Url = https://dou.yuanmazg.com/doutu?page=1
Header = user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Page_get = requests.get(url=Url, headers=Header)
Page_content = Page_get.text
Page_message = etree.HTML(Page_content)
Page_div = Page_message.xpath(//div[@class="page-content"]//a//img)
# Page_div = etree.tostring(Page_div, pretty_print=True, method=html).decode(utf-8)
# print(Page_div)
for i in Page_div:
# print(etree.tostring(i, pretty_print=True, method=html).decode(utf-8))
Page_url = https://dou.yuanmazg.com + i.xpath("@data-original")[0]
Page_name = i.xpath("@alt")[0]
Page_name = re.sub(r[,。??,/\\\\·\\*\\ ], , Page_name)
if Page_name == "":
Page_name = str(random.random())
print(Page_url)
print(Page_name)
到这里是不是名字这个事儿就完事儿了呢,当然不了,想一下,我们在电脑上创建文件的时候是不是还需要后缀名呢,那我们就应该也把后缀名获取一下子,再次优化之后,代码如下:
import requests
from lxml import etree
import re
import random
import os
Url = https://dou.yuanmazg.com/doutu?page=1
Header = user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Page_get = requests.get(url=Url, headers=Header)
Page_content = Page_get.text
Page_message = etree.HTML(Page_content)
Page_div = Page_message.xpath(//div[@class="page-content"]//a//img)
# Page_div = etree.tostring(Page_div, pretty_print=True, method=html).decode(utf-8)
# print(Page_div)
for i in Page_div:
# print(etree.tostring(i, pretty_print=True, method=html).decode(utf-8))
Page_url = https://dou.yuanmazg.com + i.xpath("@data-original")[0]
Suffix = os.path.splitext(Page_url)[1]
Page_name = i.xpath("@alt")[0]
Page_name = re.sub(r[,。??,/\\\\·\\*\\ ], , Page_name)
if Page_name == "":
Page_name = str(random.random()) + Suffix
else:
Page_name = Page_name + Suffix
print(Page_url)
print(Page_name)
运行之后结果如下:
【python爬虫-26-批量爬取表情包,让你斗图再也不会陷入无图可发的窘境】
文章图片
好的,这样子的话我们就成功的使用?
?python?
?获取了每一个页面中每一个图片的地址和名字3.5 下载
当我们获取到了图片的下载地址,以及图片名字之后,我们就可以进行下载了,那么我们的代码就变成了下面的内容:
剩余内容请转至VX公众号 “运维家” ,回复 “187” 查看。
------ “运维家” ,回复 “187” ------
------ “运维家” ,回复 “187” ------
------ “运维家” ,回复 “187” ------
运维工程师是干什么的,收单猫运维工程师,武威光伏运维工程师,西安运维交付工程师招聘,石家庄网络运维工程师招聘;
数据中心运维基础工程师,运维工程师刚进公司什么都不会,顺丰的it运维工程师,佛山IDC机房运维工程师招聘,武汉仕云运维工程师加班多吗;
运维工程师T1,设施运维工程师转型,erp运维工程师培训课题,江西环保运维工程师招聘,通富微电子桌面运维工程师;
成都科技园运维工程师招聘,运维工程师的英语怎么说,运维工程师ppt,粤电风 电运维工程师咋样,运维工程师的薪酬。
推荐阅读
- 实战(618/双11大促备战全流程点点滴滴)
- 借助LogAnalyzer打造轻量级数据库审计日志平台
- 实时开发平台建设实践,深入释放实时数据价值丨 04 期直播回顾
- 方大九钢携手图扑软件(数字孪生”高精尖“智慧钢厂)
- 昨天面试被问到的 缓存淘汰算法FIFOLRULFU及Java实现
- [ Linux 长征路第一篇] 基本指令
- 产业元宇宙(数字孪生的三重世界)
- LambdaQueryWrapper&QueryWrapper增删改CURD使用教程案例
- POJ - 2236Wireless Network (并查集)