通过多线程爬取狗妈表情包
import requests
import json
from jsonpath import jsonpath
import threading
import queue
import time
#创建下载线程
class downlodethread(threading.Thread):
def __init__(self,name,urlpage):
super().__init__(name=name)
self.urlpage = urlpage
def run(self):
print(f"{self.name}正在运行")
#print(self.urlpage.get())
#判断队列是否为空,不为空则取出url
while not self.urlpage.empty():
url = self.urlpage.get(block=False)
#拿到表情包序号
d = url[58:78]
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
reponse = requests.get(url =url,headers =headers)
#为方便管理我在e盘下建文件夹下载,运行代码时需要修改成你想下载的地址
with open(r'E:\\狗妈表情包\\'+str(d)+'.jpg','wb')as f:
print(self.name,'正在下载')
f.write(reponse.content)
#分析请求爬取数据
class crawl(threading.Thread):
def __init__(self,name,first_queue):
super().__init__(name=name)
def run(self):
lock = threading.Lock()
print(f"{self.name}正在运行")
while not first_queue.empty():
t = first_queue.get(block=False)
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
print(f"{self.name}正在运行")
response = requests.get(url=t,headers = headers)
#把数据放入队列
lock.acquire()
second_queue.put(response.text)
lock.release()
print(f"{self.name}运行结束")
def parse_response(t):
data = json.loads(t)
x = jsonpath(data, '$..data..thumbURL')
print('解析线程启动')
#print(x)
for i in x:
urlpage.put(i)
if __name__ == '__main__':
first_queue = queue.Queue()
second_queue = queue.Queue()
third_queue = queue.Queue()
urlpage = queue.Queue()
#网址通过分析ajax请求得到
for i in range(0,480,30):#把网址放入队列中
first_queue.put(f"https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%A5%9E%E4%B9%90%E4%B8%83%E5%A5%88%E8%A1%A8%E6%83%85%E5%8C%85&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word=%E7%A5%9E%E4%B9%90%E4%B8%83%E5%A5%88%E8%A1%A8%E6%83%85%E5%8C%85&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={i}&rn=30&gsm=5a&1594005271382=")
#print(first_queue.get())
#启动爬取线程组
for c in range(0,3):
crawlthread = crawl(f'爬取{c}',first_queue)
crawlthread.start()
#time.sleep(5)
crawlthread.join()
while not second_queue.empty():
t = second_queue.get()
#解析
t = threading.Thread(target=parse_response(t))
t.start()
t.join()
# 等待解析线程
time.sleep(2)
for e in range(0,3):
thread = downlodethread(f'下载{e}',urlpage)
#print(urlpage.get())
thread.start()
thread.join()
这是从百度图片中抓取下的狗妈表情包,因为百度图片用的是ajax请求,所以需要分析网页,并解析json数据。
文章浏览阅读3.7k次。监听输入法弹起状态_android app切换输入法监听
文章浏览阅读5.9k次。接上篇: 计算机网络综合简答----最终版(一)11、为什么计算机网络要采用分层体系结构?计算机网络是极为复杂的系统,采用分层体系结构进行设计,将计算机网络核照其实现的功能分解为功能相对独立的若干层,从最底层到最高层,系统功能迎层加强与完警,最终完成系统要完成的功能.分层体系结构的好处在干F各层实现相对独立的功能,每一层不必知道下一层功能实现的细节.只要知道下层通过层间接口提供的服务是什么以..._在以太网中,为什么要限制电缆的最大长度?
文章浏览阅读559次。做网站的一些定律原理和效应汇总(26条),做网站符合人类发现的些许定律和原理,也体现了一些著名的效应。其实对任何事都适用。 1.250定律 拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意味着得罪了250 名顾客。 在你的网站访客中,一个访客可能可以带来一群访客,任何网站_做网站的原理
文章浏览阅读1.6k次,点赞2次,收藏18次。【代码】粒子群代码。_粒子群算法matlab代码
文章浏览阅读902次。创建、删除和列出标准的 TCP/IP 打印机端口,以及显示和更改端口配置。如果不带参数,prnport.vbs 显示prnport.vbs 命令的帮助。创建标准 TCP/IP 打印机端口MS-DOS命令语法cscript prnport.vbs -a -r PortName [-s RemoteComputer] -hIPAddress [-u UserName -w Password] [-o ..._prnport.vbs
文章浏览阅读3.6k次,点赞3次,收藏17次。uni-app中配置微信小程序插件_plugin://ocr-plugin/ocr-navigator
文章浏览阅读455次。别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点 2016年08月14日 20:33:47 peach_li 阅读数:12256 转载自..._subnet_cluster.pkl
文章浏览阅读6.3k次。点击查看_asii
文章浏览阅读1.5k次。_神经网络机器翻译java语言程序
文章浏览阅读2.2k次。1、inux系统中常见的目录名称以及相应内容目录文件内容/boot开机所需文件—内核、开机菜单以及所需配置文件等/dev以文件形式存放任何设备与接口/etc配置文件/home用户主目录/bin存放单用户模式下还可以操作的命令/lib开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数/sbin开机过程中需要的命令/media用于挂载设备文件的目录/opt放置第三方的软件/root系统管理员的家目录_redhat7查看分区信息
文章浏览阅读2.2k次。软件缺陷管理工具mantis3.1 mantis 基本介绍 Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务。在功能上、实用性上足以满足中小型项目的管理及跟踪。更重要的是其开源,不需要负担任何费用。3.2 缺陷管理的基本流程v 管理员创建项目之后,项目经理 admin 对测试项目进行编辑。v 添加分类,还可以设置、修改版_manti工具是
文章浏览阅读2.9k次,点赞2次,收藏4次。全栈工程师开发手册 (作者:栾鹏)jquery系列教程1-选择器全解jquery子元素过滤选择器jquery子元素过滤选择器,包括:nth-child、:first-child、:last-child、:only-child,具体功能如代码中注释。通过冒号前加空格实现。和基本过滤器的区别:基本过滤器冒号前没有空格,基本过滤器对元素进行操作,获取元素列表,此处的过滤器对父元素进行操作,获取子元素列表_jquery .form-group div:nth-child(3)