首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,984 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,339 阅读
3
gradle-5.4.1-all.zip下载
9,323 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
8,126 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,985 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
615
篇文章
累计收到
629
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
615
篇与
的结果
2021-08-23
ES6数组根据对象的某个属性去重
前言:es6的数组根据他其中某一个对象的key值来去重的封装方法封装方法如下: unique(arr, val) { const res = new Map() return arr.filter(item => !res.has(item[val]) && res.set(item[val], 1)) },调用使用方法:第一个参数是数组,第二个参数是你要根据哪个字段来去重 this.unique(DataList, 'GoodsId')来源:https://blog.csdn.net/qq_41619796/article/details/106259333
2021年08月23日
484 阅读
0 评论
0 点赞
2021-08-20
域名喜加一:kvxy.cn
很久以前买了一个5s.pw,当时66块钱收的,然后后来又抢注了一个v1.pw,于是把5s.pw挂上了一口价100元,然后卖出去了。然后又试着抢注其他cn和com域名,发现根本抢不到。然后今天早上看到一个四位cn,包含我名字的一个域名,也挺有意义的,只要10块然后检查了一下域名状态发现,还有五天过期+被腾讯拦截但是没被墙也没被污染,反正只要10块钱,于是剁手了购买之后还续费了一年
2021年08月20日
346 阅读
0 评论
0 点赞
2021-08-18
Vue3将数据导出为Excel—公司偷学技术的第1天
有一个任务要求是这样的,将抓取到的数据展示在页面之后,可以点击按钮导出问Excel文件。然后我翻项目原先的代码,也有类似的功能,并且导出之后网络图片也能够保存下来。用到了js-table2excel第一步安装 npm install js-table2excel第二步引入 import table2excel from 'js-table2excel'第三步使用 table2excel([列集合], [数据集合], '导出文件名')第三步生成表格需要传入三个参数列集合,数据集合和文件名。列集合格式如下:const column = [ { 'title':'表格中显示的标题', 'key':'数据集合中的键', 'type':'数据类型,text,image', 'width':'如果type为image可以设置宽度', 'height':'如果type为image可以设置高度', },{ 'title':'表格中显示的标题', 'key':'数据集合中的键', 'type':'数据类型,text,image', 'width':'如果type为image可以设置宽度', 'height':'如果type为image可以设置高度', }, ]至于数据集合这块要求不能套娃,就是数据必须全部在第一层,我就是因为这个然后踩坑了,不得不重新将数据清洗才传入,我的大概就是这样的。const exportData = [ { 'first':{ 'name':'张三', 'age':'18', }, 'second':{ 'money':1000, 'data':1 } },{ 'first':{ 'name':'A', 'age':'18', }, 'second':{ 'money':1000, 'data':1 } }, ]然后就报错了,被迫改成这样const exportData = [ { 'name':'张三', 'age':'18', 'money':1000, 'data':1 },{ 'name':'李四', 'age':'18', 'money':1000, 'data':1 }, ]图片源于网络,差不多这样
2021年08月18日
963 阅读
1 评论
0 点赞
2021-08-17
Python异步请求对大数量请求也太友好了,Python异步的复习
刚进入公司,由于对抓取这块比较有经验,然后刚好业务也是有一部分抓取的。于是我的任务就先是这些数据采集。采用异步请求之后的效果:采用同步请求之前的效果:其实这个只是20来条数据,Python也才发送了40多次网络请求,然后差别已经是十多秒的差距了。对于企业级来说,肯定是影响用户体验了,所以我当时考虑的是多线程或协程。然后我就先从协程开始的。由于异步请求这块也就刚开始学习爬虫的时候学了学,后面也就很少去用了,顶多就无脑多线程。一开始以及写好了同步请求的代码,也就两个网络请求,一个get,一个post,post需要传参和请求头(有一丢丢反扒)。大概就是这样的,涉及关键部分的网址都打码了。然后我就打开了万能的搜索引擎:把前面几个大概都看了下,最后还是选择了第一篇(事实证明我眼光不错,也就只踩了一个坑),为啥?百万并发,多牛逼。https://www.cnblogs.com/shenh/p/9090586.html首先它是将同步和异步的效果进行了一个对比:下面通过举例来对比同步代码和异步代码编写方面的差异,其次看下两者性能上的差距,我们使用sleep(1)模拟耗时1秒的io操>作。import time def hello(): time.sleep(1) def run(): for i in range(5): hello() print('Hello World:%s' % time.time()) # 任何伟大的代码都是从Hello World 开始的! if __name__ == '__main__': run()输出:(间隔约是1s)Hello World:1527595175.4728756 Hello World:1527595176.473001 Hello World:1527595177.473494 Hello World:1527595178.4739306 Hello World:1527595179.474482异步代码import time import asyncio # 定义异步函数 async def hello(): asyncio.sleep(1) print('Hello World:%s' % time.time()) def run(): for i in range(5): loop.run_until_complete(hello()) loop = asyncio.get_event_loop() if __name__ =='__main__': run()输出:Hello World:1527595104.8338501 Hello World:1527595104.8338501 Hello World:1527595104.8338501 Hello World:1527595104.8338501 Hello World:1527595104.8338501async def 用来定义异步函数,其内部有异步操作。每个线程有一个事件循环,主线程调用asyncio.get_event_loop()时会创建事件循环,你需要把异步的任务丢给这个循环的run_until_complete()方法,事件循环会安排协同程序的执行。aiohttp,用于并发请求如果需要并发http请求怎么办呢,通常是用requests,但requests是同步的库,如果想异步的话需要引入aiohttp。这里引入一个类,from aiohttp import ClientSession,首先要建立一个session对象,然后用session对象去打开网页。session可以进行多项操作,比如post, get, put, head等。基本用法:async with ClientSession() as session: async with session.get(url) as response:aiohttp异步实现的例子:import asyncio from aiohttp import ClientSession tasks = [] url = "https://www.baidu.com/{}" async def hello(url): async with ClientSession() as session: async with session.get(url) as response: response = await response.read() print(response) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(hello(url))首先async def 关键字定义了这是个异步函数,await 关键字加在需要等待的操作前面,response.read()等待request响应,是个耗IO操作。然后使用ClientSession类发起http请求。多链接异步访问如果我们需要请求多个URL该怎么办呢,同步的做法访问多个URL只需要加个for循环就可以了。但异步的实现方式并没那么容易,在之前的基础上需要将hello()包装在asyncio的Future对象中,然后将Future对象列表作为任务传递给事件循环。import time import asyncio from aiohttp import ClientSession tasks = [] url = "https://www.baidu.com/{}" async def hello(url): async with ClientSession() as session: async with session.get(url) as response: response = await response.read() # print(response) print('Hello World:%s' % time.time()) def run(): for i in range(5): task = asyncio.ensure_future(hello(url.format(i))) tasks.append(task) if __name__ == '__main__': loop = asyncio.get_event_loop() run() loop.run_until_complete(asyncio.wait(tasks))输出:Hello World:1527754874.8915546 Hello World:1527754874.899039 Hello World:1527754874.90004 Hello World:1527754874.9095392 Hello World:1527754874.9190395收集http响应好了,上面介绍了访问不同链接的异步实现方式,但是我们只是发出了请求,如果要把响应一一收集到一个列表中,最后保存到本地或者打印出来要怎么实现呢,可通过asyncio.gather(*tasks)将响应全部收集起来,具体通过下面实例来演示。import time import asyncio from aiohttp import ClientSession tasks = [] url = "https://www.baidu.com/{}" async def hello(url): async with ClientSession() as session: async with session.get(url) as response: # print(response) print('Hello World:%s' % time.time()) return await response.read() def run(): for i in range(5): task = asyncio.ensure_future(hello(url.format(i))) tasks.append(task) result = loop.run_until_complete(asyncio.gather(*tasks)) print(result) if __name__ == '__main__': loop = asyncio.get_event_loop() run()输出Hello World:1527765369.0785167 Hello World:1527765369.0845182 Hello World:1527765369.0910277 Hello World:1527765369.0920424 Hello World:1527765369.097017 [b'<!DOCTYPE html>\r\n<!--STATUS OK-->\r\n<html>\r\n<head>\r\n......异常解决假如你的并发达到2000个,程序会报错:ValueError: too many file descriptors in select()。报错的原因字面上看是 Python 调取的 select 对打开的文件有最大数量的限制,这个其实是操作系统的限制,linux打开文件的最大数默认是1024,windows默认是509,超过了这个值,程序就开始报错。这里我们有三种方法解决这个问题:1.限制并发数量。(一次不要塞那么多任务,或者限制最大并发数量)2.使用回调的方式。3.修改操作系统打开文件数的最大限制,在系统里有个配置文件可以修改默认值,具体步骤不再说明了。不修改系统默认配置的话,个人推荐限制并发数的方法,设置并发数为500,处理速度更快。#coding:utf-8 import time,asyncio,aiohttp url = 'https://www.baidu.com/' async def hello(url,semaphore): async with semaphore: async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.read() async def run(): semaphore = asyncio.Semaphore(500) # 限制并发量为500 to_get = [hello(url.format(),semaphore) for _ in range(1000)] #总共1000任务 await asyncio.wait(to_get) if __name__ == '__main__': # now=lambda :time.time() loop = asyncio.get_event_loop() loop.run_until_complete(run()) loop.close()看完其实已经差不多了,然后发现似乎没有传递请求头,于是看了另外一篇。https://zhuanlan.zhihu.com/p/45159102自定义请求头headers = {'content-type': 'image/gif'} session.post(url, data=data, headers=headers)发现其实和requests差不多异步请求的分块chunk并发控制又在这篇博客发现可以分块https://www.hhtjim.com/aiohttp-asyncio-asynchronous-network-basic-operation-request.html自行chunk操作自己按照所有任务的list列表进行chunk切割,然后分块进行请求,每块中固定chunk数量的任务。基本可以实现想要的并发限制操作async def _bulk_task(num,current_page = 1): """批量创建异步任务 """ task = [] for i in range(num):# 每次10个连接并发进行请求 task.append(asyncio.create_task(get(current_page))) current_page += 1 return await asyncio.gather(*task) # 主要进行chunk操作的函数 def run_task(total,chunk,offset_start_page = 1): """运行分块处理的批量任务 Arguments: total int 总请求数 chunk int 每次并发请求数 offset_start_page int 初始分块开始的页数(偏移页数),正常默认为1 Yields: 返回收集的异步任务运行结果 """ length = math.ceil(total/chunk) for i in range(length): start_page = i * chunk + offset_start_page # 当前分块开始的页数 haldle_num = chunk# 当前需要并发处理的数量 #处理结尾的块 if i == length - 1: # print(':::',chunk,start_page + chunk - offset_start_page) haldle_num = min(chunk,total + offset_start_page - start_page) # print('当前分块下标:{},当前分块需要处理的总数:{},当前分块开始页数:{}'.format(i,haldle_num,start_page)) rel = asyncio.run(_bulk_task(haldle_num,start_page)) yield rel rel = run_task(123,10)# 123总任务 每10条并发请求 for i in rel: print(i)综上内容,完成了我对异步的复习,然后将时间效率大大提高。然后就是我说的踩坑的地方,在启动任务的时候,第一篇博客是这样写的loop.run_until_complete(asyncio.gather(*tasks))然而,这是老版本的,好像在某次更新之后就不能这样写了不然会报错RuntimeError: This event loop is already running in python在网上找了一会没有答案,突然想起,第一次学的时候好像也有说过启动问题,于是我改成这样asyncio.gather(*tasks)成功自救
2021年08月17日
766 阅读
0 评论
0 点赞
2021-08-12
七夕品牌福利,免费领红包封面
微信搜一搜即可免费领红包封面。以下图文内容均转载自微信明星款.七夕红包封面8月13日至14日,每天10点微信搜一搜「FILA」有机会领取倪妮七夕主题红包封面~8月14日11点微信搜一搜「使命召唤」有机会领取欧阳娜娜红包封面~情侣款.七夕红包封面8月12日-8月13日,每天12点微信搜一搜「博柏利」或「Burberry」有机会领取博博鹿主题红包封面~8月12日-8月14日,每天12点微信搜一搜「三三星球」有机会领取小羊驼三三和戏精宿舍Q版红包封面每一天都不一样喔~8月7日-8月14日,每天10点微信搜一搜「DR」有机会领取DR求婚主题红包封面~8月13日10点微信搜一搜「花点时间」有机会领取玫瑰花束主题红包封面~8月11日-8月16日,每天10点微信搜一搜「永辉超市」有机会领取永辉超市七夕主题红包封面~8月13日-8月15日,每天12点微信搜一搜「最强蜗牛」有机会领取Q版主题红包封面~8月11日微信搜一搜「鸿图之下」0点有机会领取鸿图之下×恰恰专属红包封面微信搜一搜「DR」10点有机会领取DR求婚主题红包封面微信搜一搜「永辉超市」10点有机会领取永辉超市七夕主题红包封面微信搜一搜「NIKE」10点有机会领取NIKE限量红包封面微信搜一搜「真三国无双霸」10点有机会领取限量主题红包封面8月12日微信搜一搜「鸿图之下」0点有机会领取鸿图之下×恰恰专属红包封面微信搜一搜「DR」10点有机会领取DR求婚主题红包封面微信搜一搜「永辉超市」10点有机会领取永辉超市七夕主题红包封面微信搜一搜「NIKE」10点有机会领取NIKE限量红包封面微信搜一搜「真三国无双霸」10点有机会领取限量主题红包封面微信搜一搜「博柏利」或「Burberry」12点有机会领取博博鹿主题红包封面微信搜一搜「三三星球」12点有机会领取Q版红包封面微信搜一搜「特步」12点有机会领取神秘代言人联名红包封面微信搜一搜「中国珠宝」18点有机会领取品牌报喜官鹊宝主题红包封面8月13日微信搜一搜「鸿图之下」0点有机会领取鸿图之下×恰恰专属红包封面微信搜一搜「DR」10点有机会领取DR求婚主题红包封面微信搜一搜「FILA」10点有机会领取倪妮七夕主题红包封面微信搜一搜「永辉超市」10点有机会领取永辉超市七夕主题红包封面微信搜一搜「NIKE」10点有机会领取NIKE限量红包封面微信搜一搜「花点时间」10点有机会领取玫瑰花束主题红包封面微信搜一搜「茵曼」10点有机会领取限量主题红包封面微信搜一搜「光与夜之恋」11点有机会领取Q版齐司礼红包封面微信搜一搜「游云南」11:11有机会领取大象主题云南纪念红包封面微信搜一搜「博柏利」或「Burberry」12点有机会领取博博鹿主题红包封面微信搜一搜「三三星球」12点有机会领取Q版红包封面微信搜一搜「最强蜗牛」12点有机会领取Q版主题红包封面8月14日微信搜一搜「鸿图之下」0点有机会领取鸿图之下×恰恰专属红包封面微信搜一搜「DR」10点有机会领取DR求婚主题红包封面微信搜一搜「FILA」10点有机会领取倪妮七夕主题红包封面微信搜一搜「NIKE」10点有机会领取NIKE限量红包封面微信搜一搜「永辉超市」10点有机会领取永辉超市七夕主题红包封面微信搜一搜「茵曼」10点有机会领取限量主题红包封面微信搜一搜「光与夜之恋」11点有机会领取Q版齐司礼红包封面~微信搜一搜「使命召唤」11点有机会领取欧阳娜娜红包封面微信搜一搜「光与夜之恋」11点有机会领取Q版齐司礼红包封面微信搜一搜「游云南」11:11有机会领取大象主题云南纪念红包封面微信搜一搜「三三星球」12点有机会领取Q版红包封面微信搜一搜「最强蜗牛」12点有机会领取Q版主题红包封面微信搜一搜「笑果」12点有机会领取笑果超有梗主题红包封面微信搜一搜「热风」或「hotwind」20点有机会领取迪士尼小熊维尼款红包封面8月15日微信搜一搜「鸿图之下」0点有机会领取鸿图之下×恰恰专属红包封面微信搜一搜「永辉超市」10点有机会领取永辉超市七夕主题红包封面微信搜一搜「最强蜗牛」12点有机会领取Q版主题红包封面微信搜一搜「笑果」12点有机会领取笑果超有梗主题红包封面8月16日微信搜一搜「永辉超市」10点有机会领取永辉超市七夕主题红包封面微信搜一搜「笑果」12点有机会领取笑果超有梗主题红包封面
2021年08月12日
359 阅读
0 评论
0 点赞
2021-08-11
谷歌浏览器书签因为同步误删怎么办
这两天在公司用的公司电脑,然后开始慢慢的配置一些东西,使电脑用的更习惯。然后就在谷歌浏览器登录了自己的账号,顺便就可以把浏览器里面的一些应用一起安装了。所以还是挺方便的。但是吧,书签当时没注意,全删了,因为在公司就重新删了换在公司常用的书签了。结果刚刚回到家,打开电脑,发现浏览器之前的书签全没了,我还以为眼花了。还好在百度找到了解决方案,不然我收藏多年的网址可就白瞎了。谷歌浏览器会自动备份书签,所以只需要将这个备份的.bak后缀去掉,就可以恢复备份了。在Windows目录下:C:\Users[你的用户名]\AppData\Local\Google\Chrome\User Data\Default这里面有一个Bookmarks和Bookmarks.bak将Bookmarks删掉,然后将Bookmarks.bak的后缀去掉重新打开浏览器即可。
2021年08月11日
529 阅读
0 评论
0 点赞
2021-08-11
xpath里如何定义包含一个class
原网址:https://segmentfault.com/q/1010000000779093//div[contains(@class, 'demo')]字符串函式string(object?)根据内建法则转换任何四种XPath数据型别为字符串。参数可为XPath,此时符合条件的节点(群)被转换成字符串返回。concat(string, string, string*)链接任何数量的字符串。contains(s1, s2)如果s1包含s2返回真。normalize-space(string?)所有在字符串头和尾的空白字符都被移除,或者将字符间两个及以上的空白字符置换成单一空格。有些XML因打印关系被美化,但可能让后来的字符串处理结果不可靠,故使用此函式有时能很好地改善情况。
2021年08月11日
444 阅读
0 评论
0 点赞
1
...
26
27
28
...
88