Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何和女生聊天不尬聊_女孩说和我聊天是尬聊

如何和女生聊天不尬聊_女孩说和我聊天是尬聊

作者头像
全栈程序员站长
发布于 2022-09-30 10:51:19
发布于 2022-09-30 10:51:19
32700
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

大家好呀,我是辣条。

写这篇文章的灵感来源于之前和朋友的聊天,真的无力吐槽了,想发适合的表情包怼回去却发现收藏的表情包就那几个,就想着是不是可以爬取一些表情包,再也不用尬聊了。

先给大家看看我遇到的聊天最尬的场面:

斗图吧图片采集

抓取目标

网站:斗图吧

工具使用

开发环境:win10、python3.7 开发工具:pycharm、Chrome 工具包:requests、etree

重点内容学习

1.Q队列储存数据信息 2.py多线程使用方法 3.xpath语法学习

项目思路分析

根据你需要的关键字搜索对应的图片数据 搜索的关键字和页数根据改变对应的url https://www.doutula.com/search?type=photo&more=1&keyword={}&page={} 将对应的url地址保存在page队列里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    page_q = Queue()
    img_q = Queue()
    for x in range(1, 11):
        url = 'https://www.doutula.com/search?type=photo&more=1&keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&page={}'.format(x)
        page_q.put(url)

通过xpath方式提取当前页面的url地址以及图片的名字 将提取到的图片和地址存储在img队列里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def parse_page(self, url):
response = requests.get(url, headers=self.headers).text
# print(response)
html = etree.HTML(response)
images = html.xpath('//div[@class="random_picture"]')
for img in images:
img_url = img.xpath('.//img/@data-original')
# 获取图片名字
print(img_url)
alt = img.xpath('.//p/text()')
for name, new_url in zip(alt, img_url):
filename = re.sub(r'[??.,。!!*\\/|]', '', name) + ".jpg"
# 获取图片的后缀名
# suffix = os.path.splitext(img_url)[1]
# print(alt)
self.img_queue.put((new_url, filename))

根据图片地址下载保存图片 保存图片是要根据图片url来判断保存的后缀(我统一保存的jpg,问就是因为懒癌晚期)

整理需求

  • 创建两个线程类,一个用来提取网页图片数据,一个保存图片数据
  • 创建两个队列,一个保存page的url, 一个保存图片的url和名字
  • 通过xpath的方法提取出网址的图片地址

简易源码分享

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
from lxml import etree
import re
from queue import Queue
import threading
class ImageParse(threading.Thread):
def __init__(self, page_queue, img_queue):
super(ImageParse, self).__init__()  
self.page_queue = page_queue
self.img_queue = img_queue
self.headers = { 

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
def run(self):
if self.page_queue.empty():
break
url = self.page_queue.get()
self.parse_page(url)
def parse_page(self, url):
response = requests.get(url, headers=self.headers).text
# print(response)
html = etree.HTML(response)
images = html.xpath('//div[@class="random_picture"]')
for img in images:
img_url = img.xpath('.//img/@data-original')
# 获取图片名字
print(img_url)
alt = img.xpath('.//p/text()')
for name, new_url in zip(alt, img_url):
filename = re.sub(r'[??.,。!!*\\/|]', '', name) + ".jpg"
# 获取图片的后缀名
# suffix = os.path.splitext(img_url)[1]
# print(alt)
self.img_queue.put((new_url, filename))
class Download(threading.Thread):
def __init__(self, page_queue, img_queue):
super(Download, self).__init__()
self.page_queue = page_queue
self.img_queue = img_queue
def run(self):
if self.img_queue.empty() and self.page_queue.empty():
break
img_url, filename = self.img_queue.get()
with open("表情包/" + filename, "wb")as f:
response = requests.get(img_url).content
f.write(response)
print(filename + '下载完成')
def main():
# 建立队列
page_q = Queue()
img_q = Queue()
for x in range(1, 11):
url = 'https://www.doutula.com/search?type=photo&more=1&keyword=%E7%A8%8B%E5%BA%8F%E5%91%98&page={}'.format(x)
page_q.put(url)
for x in range(5):
t = ImageParse(page_q, img_q)
t.start()
t = Download(page_q, img_q)
t.start()
if __name__ == '__main__':
main()

PS:表情包在手,聊天永不尬,没什么事是一个表情包解决不了的,如果有那就多发几个!对你有用的话给辣条一个三连吧,感谢啦!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192618.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
21天打造分布式爬虫-多线程下载表情包(五)
5.1.threading模块 简单使用 import threading,time def coding(): for x in range(3): print('正在写代码%s'%x) time.sleep(2) def drawing(): for x in range(3): print('正在画画%s'%x) time.sleep(2) def main(): t1 = threading.Thread(
zhang_derek
2018/08/10
3580
21天打造分布式爬虫-多线程下载表情包(五)
斗图狂魔必备沙雕表情包,python多线程爬取斗图啦表情图片
混迹网络,表情包必不可少,从表情包图片的出现,无疑是席卷网络聊天的态势,涌现了不少网络神图,同时也培养了不少斗图狂魔,今天的沙雕图片你收藏了么?
二爷
2020/07/22
1.2K0
斗图狂魔必备沙雕表情包,python多线程爬取斗图啦表情图片
爬虫篇|开多线程,咱们一起来斗图(九)
曾经我看过一篇文章,对于爬虫有这么一个比喻,爬虫就是去果园摘水果,但是一个人多摘不了这么多,这不叫上了隔壁老王,咱们一块去,其实就是就是一个线程,人太多了,不如分两个队伍,其实就是两个进程,可是两个队伍摘水果,万一他们都摘了,重复进入别人的领地,所以需要线程锁来隔开两个进程的地盘
润森
2019/08/29
3590
爬虫篇|开多线程,咱们一起来斗图(九)
python模块之Queue
import Queue myqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 将一个值放入队列中 myqueue.put(10) 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。 将一个值从队列中取出 myqueue.get() 调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。 python queue模块有三种队列: 1、python queue模块的FIFO队列先进先出。 2、LIFO类似于堆。即先进后出。 3、还有一种是优先级队列级别越低越先出来。 针对这三种队列分别有三个构造函数: 1、class Queue.Queue(maxsize) FIFO 2、class Queue.LifoQueue(maxsize) LIFO 3、class Queue.PriorityQueue(maxsize) 优先级队列 介绍一下此包中的常用方法: Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue.full 与 maxsize 大小对应 Queue.get([block[, timeout]])获取队列,timeout等待时间 Queue.get_nowait() 相当Queue.get(False) 非阻塞 Queue.put(item) 写入队列,timeout等待时间 Queue.put_nowait(item) 相当Queue.put(item, False) Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 Queue.join() 实际上意味着等到队列为空,再执行别的操作
菲宇
2019/07/02
1.2K0
用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)
前两篇文章我们分别介绍了 用正则表达式爬取古诗文网站,边玩边学【python爬虫入门进阶】(09) CSV文件操作起来还挺方便的【python爬虫入门进阶】(10) 还没来得及看的小伙伴们可以看一波。 本文以斗图吧网站为例,介绍如何将生产者消费者模式运用到爬虫当中以提高爬虫效率。抢先预览一波效果,如下图1所示:
码农飞哥
2021/12/16
5790
用生产者消费者模式爬取斗图吧,一次性收获超多表情包【python爬虫入门进阶】(11)
爬虫学习之第四章爬虫进阶之多线程爬虫
有些时候,比如下载图片,因为下载图片是一个耗时的操作。如果采用之前那种同步的方式下载。那效率肯会特别慢。这时候我们就可以考虑使用多线程的方式来下载图片。
py3study
2020/01/15
3700
用Python把表情包都爬下来,从此不用再担心斗图会输。
进入斗图啦 1、进入斗图啦网址,点击“最新表情”,再点击第二、第三页,得出规律如下:
sergiojune
2018/12/07
6850
用Python把表情包都爬下来,从此不用再担心斗图会输。
生产者与消费者+Queue(线程安全)
  如果使用threading.Lock(),或者threading.Condition(),都是线程不安全的,它们都是锁,共同方法(lock.acquire(),lock.release()),只不过Condition()有多了几个方法,wait()、notify()、notify_all(),如果等待的情况下,使用wait()将不占用CPU,当用资源消耗时,notify唤醒等待的线程。Lock()一直占用CPU资源。感觉还是Queue好用是吧。
py3study
2020/01/17
3510
送书|为避免尬聊,我竟爬取了一千多张斗图
前几天和女神聊天的时候实在是太尬了,因为没有足够的斗图表情包,整个聊天的气氛都带动不起来,所以抑郁不得志!
我被狗咬了
2021/09/02
2880
获取素材图无忧,Pixabay图库网Python多线程采集下载
图片素材想必是不少人都在寻找的内容,随着版权意识的加深,可供免费使用的图片素材可不是那么好找的哦,不过还是有不少国外知名素材网站可供我们使用,而且国内访问也是比较快,同时支持中文,感谢网站制作及素材分享者们!
二爷
2020/07/22
1.7K0
获取素材图无忧,Pixabay图库网Python多线程采集下载
Scrapy_Study03
Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python 的多线程的思考 对于资源,加锁是个重要的环节。因为python原生的lit,dict等 ,都是not thread safe的。而Queue ,是线程安全的,因此满足使用条件下,建议使用队列
Echo_Wish
2023/11/30
1220
Python 多线程爬虫实战
在线程中,访问一些全局变量,加锁是一个经常的过程。如果你是想把一些数据存储到某个队列中,那么Python内置了一个线程安全的模块叫做queue模块。Python中的queue模块中提供了同步的、线程安全的队列类,包括FIFO(先进先出)队列Queue,LIFO(后入先出)队列LifoQueue。这些队列都实现了锁原语(可以理解为原子操作,即要么不做,要么都做完),能够在多线程中直接使用。可以使用队列来实现线程间的同步。相关的函数如下:
Python知识大全
2020/02/13
4540
真香警告!多线程分类表情包爬取,一起斗图叭(*^▽^*)~~~
有一个网站,叫做“斗图啦”,网址是:https://www.doutula.com/。这里面包含了许许多多的有意思的斗图图片,还蛮好玩的。有时候为了斗图要跑到这个上面来找表情,实在有点费劲。于是就产生了一个邪恶的想法,可以写个爬虫,把所有的表情都给爬下来。这个网站对于爬虫来讲算是比较友好了,他不会限制你的headers,不会限制你的访问频率(当然,作为一个有素质的爬虫工程师,爬完赶紧撤,不要把人家服务器搞垮了),不会限制你的IP地址,因此技术难度不算太高。但是有一个问题,因为这里要爬的是图片,而不是文本信息,所以采用传统的爬虫是可以完成我们的需求,但是因为是下载图片所以速度比较慢,可能要爬一两个小时都说不准。因此这里我们准备采用多线程爬虫,一下可以把爬虫的效率提高好几倍。
Python研究者
2020/12/11
7370
真香警告!多线程分类表情包爬取,一起斗图叭(*^▽^*)~~~
Python素材下载爬虫,多线程rar下载爬虫
一个多线程素材下载爬虫,实现多线程素材下载,包含素材包rar,素材图及素材描述,应用了经典的生产者与消费者模式,不过数据没有下载全,容易出现卡死的问题,期待后期能够解决相关问题,可以算是一个半成品,供大家参考和学习,有更好的多线程解决方案也可以交流!
二爷
2020/07/22
7490
Python素材下载爬虫,多线程rar下载爬虫
一篇文章教会你利用Python网络爬虫成为斗图达人
你是否在寻找可以与高手斗图的应用? 你是否在寻找可以自制表情的应用?你是否在寻找最全、最爆笑的表情库?
前端皮皮
2020/11/26
3670
一篇文章教会你利用Python网络爬虫成为斗图达人
类及数据库的应用,G-MARK网站数据Python爬虫系统的构建
“Good Design Award”创立于1957年,也是日本国内唯一综合性的设计评价与推荐制度,通称为G-mark,中文称之为日本优良设计大奖。
二爷
2020/07/22
6130
类及数据库的应用,G-MARK网站数据Python爬虫系统的构建
爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求
6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 url = 'http://www.doutula.com/' #伪装成成浏览器请求 #找到request200,200代表请求成功的里面的内容,按F12里面找 ''' Referer: http://www.doutula.com/ Referer为防跨域请求,我看了下图片都是
小小咸鱼YwY
2019/07/24
4770
爬虫例子,Python多线程爬虫例子案例
很久没写爬虫了,一个经典的Python爬虫例子,Python多线程爬虫例子案例,目标网站结构比较简单,适合练手使用,采用了经典的生产者和消费者模式,同时结合python类和装饰器的使用,应该能够让你获益不少。
二爷
2020/07/22
1.5K0
爬虫例子,Python多线程爬虫例子案例
多线程爬虫入门及问题解决(爬取表情包)
我们写这段代码的初衷是因为刚开始的时候 IMG_LIST 可能是 0 ,因为生产者还没来得及做,所以让消费者等一下生产者,所以 continue,但是设想一下到最后的时候,消费者已经消耗完所有的 IMG_LIST 资源了。IMG_LIST 确实为空了,他还在这里不停的循环。
wsuo
2020/07/31
3940
多线程爬虫入门及问题解决(爬取表情包)
【玩转Python系列【小白必看】Python多线程爬虫:下载表情包网站的图片
全栈若城
2024/02/29
1820
【玩转Python系列【小白必看】Python多线程爬虫:下载表情包网站的图片
推荐阅读
相关推荐
21天打造分布式爬虫-多线程下载表情包(五)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档