python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据
使用到的技术点
- requests请求库
- re 正则表达式
- pyquery解析库,python实现的jquery
- threading 线程
- queue 队列
'''
斗图啦多线程方式'''import requests,time,re,os
from pyquery import PyQuery as jq
from requests.exceptions import RequestException
from urllib import request
# 导入线程类
import threading
# 导入队列类
from queue import Queue
head = {"User_Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",}
# 创建项目文件夹
pt=os.path.dirname(os.path.abspath(__file__))
path = os.path.join(pt, "斗图啦")
if not os.path.exists(path):os.mkdir(path)'''
生产者类
继承自多线程类threading.Thread
重写init方法和run方法
'''
class Producer(threading.Thread):def __init__(self,img_queue,url_queue,*args,**kwargs):super(Producer, self).__init__(*args,*kwargs)self.img_queue=img_queueself.url_queue=url_queuedef run(self):while True:if self.url_queue.empty():# 如果没有url了 直接退出循环breakurl=self.url_queue.get()self.parse_page(url)## 解析数据方法def parse_page(self,url):res=requests.get(url,headers=head)doc=jq(res.text)# print(res.text)# 查询到所有的a标签items= doc.find(".page-content a").items()for a in items:title=a.find("p").text()src=a.find("img.img-responsive").attr("data-original")# 分割路径 拿到扩展名pathtype= os.path.splitext(src)[1]# 使用正则表达式 去掉特殊字符patitle=re.sub(r'[\.。,\??\*!!\/~]',"",title)filename = patitle + pathtypefilepath=os.path.join(path,filename)# 添加到消费者队列 循环下载图片self.img_queue.put((filepath,src))'''
消费者
和生产者一样的道理
'''
class Customer(threading.Thread):def __init__(self,img_queue,url_queue,*args,**kwargs):super(Customer, self).__init__(*args,**kwargs)self.img_queue=img_queueself.url_queue=url_queuedef run(self):while True:if self.img_queue.empty() and self.url_queue.empty():#如果没有url并且图片下载完成 直接退出break# 在队列中拿到路径和图片链接filepath,src=self.img_queue.get()print('%s开始下载,链接%s' % (filepath, src))# 请求图片img = requests.get(src)# 写入本地 content表示二进制数据,text是文本数据with open(filepath, "wb")as f:f.write(img.content)# request.urlretrieve(src,os.path.join(path,filename))print('%s下载完成' % filepath)def main():# 构建url队列和img队列url_queue=Queue(100000)img_queue=Queue(100000)# 构建url 爬取1到100页的数据for i in range(1,101):url="https://www.doutula.com/photo/list/?page="+str(i)url_queue.put(url)# 添加到生产者队列中
# 开启5个线程线程执行生产者for i in range(5):t=Producer(img_queue,url_queue)t.start()# 开启3个线程线程执行消费者for i in range(3):t=Customer(img_queue,url_queue)t.start()if __name__ == '__main__':print("爬虫调度启动---------")main()print("爬虫调度完成---------")
转载于:https://www.cnblogs.com/HiLzd/p/11246116.html
python多线程爬取斗图啦数据相关推荐
- 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!
最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...
- Python多线程爬取斗图啦表情包
斗图啦表情包多线程爬取-撸代码 首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os模块 import asyncio import aiohttp ...
- Python爬虫系列(三)多线程爬取斗图网站(皮皮虾,我们上车)
斗图我不怕 最近看了Python多线程的相关内容,并且前几天观看了腾讯课堂潭州学院上面的关于斗图网爬取的公开课,课程内容大致是利用Python多线程爬取斗图(多页),并将图片保存到本地.自己写这篇文章 ...
- python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...
原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...
- 爬虫笔记——多线程爬取斗图网表情包(threading)
爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...
- python3爬虫——多线程爬取斗图网表情包
本文用多线程生产者,消费者模式爬取斗图网的表情包,并下载保存到本地,get_page()函数负责获取页面的图片的url链接,downlod_img()函数通过图片url下载保存到本地文件夹中,开启多线 ...
- 多线程爬取斗图表情包
和朋友在QQ上聊天感觉呀没有激情,突然,突发奇想,我写个小的爬虫 ,把表情包爬取下来随便挑,斗到他们吐血. 下面是爬取斗图的代码,代码可供参考 #encoding:utf8#模块import reim ...
- python多线程爬取妹子图网站_python爬取妹子图全站全部图片-可自行添加-线程-进程爬取,图片去重...
from bs4 import BeautifulSoup import sys,os,requests,pymongo,time from lxml import etree def get_fen ...
- python简单爬取斗图图片(自学第十天)
一.前期准备 (一).我们要爬取的页面 1,我们要爬取的网站为:https://www.doutula.com/photo/list/?page=1 2,获取请求头,来模拟浏览器浏览,不让网站直接就暴 ...
最新文章
- java局部变量全局变量,实例变量的理解
- RDB 和 AOF 持久化的原理是什么?我应该用哪一个?它们的优缺点?
- 让机器听懂世界,触及人类梦想还有多远?
- Delphi中String与PAnsiChar转换
- 在NIO.2中创建文件和目录
- 怎么测试服务器端口是否对外开放_12个经典性能测试人员面试题
- 输入和用户界面——总结
- 保存一个 Python 对象,之后使用时直接读取
- 20200504:力扣187周赛下
- [Shell]Tetris Game
- 如何在引导程序中将容器垂直对齐
- 如何使Session永不过期
- 拓端tecdat:R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
- python权重相似度矩阵_gensim之使用稀疏矩阵相似度,判断输入的文字意图
- 用.Net MVC模式做Topjui后台,通过实现IModelBinder转换前端查询条件,实现前端动态查询...
- 文献挖掘:SATI文献题录信息统计分析工具初试
- 如何完成一款游戏? | 独立游戏制作
- XMPP通信语义学 message, presence IQ
- MsDos下的Debug调试器与8080汇编小实验
- Vertiv公司推出业界功率密度最高的一款UPS