今天我又回来啦
是今天才到的200赞哦!所以今天就开始更新啦,其实有点头疼该写什么了,犹豫是该继续往后教,还是多弄点案例来帮助大家更熟悉爬虫的操作,往后教的话,有些东西可能一下子没法接受,重复的话,又像是水文章……
纠结ing…
如果你有好的意见,就在评论里告诉我吧!
聊一聊
还记得我们学爬虫的初衷吗?
有的人是为了钱,有的人是为了当老司机,还有的人是为了更多的钱,那么我们这几天爬下来的东西,跟钱有什么关系呢?
举个栗子:
我们爬取了很多很多耳机的数据,从中筛选出好评多,购买次数多,利益高的几个耳机,不就可以自己进货自己卖了吗,也可以把数据卖给需要的商家。
再比如说,标题党!想要当标题党也是要有流量支持的鸭,你不知道大家喜欢什么,怎么当标题党??怎么知道大家喜欢什么呢,还记得吗,百度就是一个超级大的大的大的爬虫,想办法从百度那里搞点数据,然后自己再分析一下,就知道大家喜欢什么呗~
为什么说这个时代数据就等于金钱呢,举例子说明哈:
大哥们去找片的时候是不是大多时候都搜索的关键字呢?
一般很少搜索女优的名字了吧。
还有啊,比如说最近很火的马保国,很多b站up主因为做这个视频盈利了不少,那么我们去搜这个视频的时候,是根据up主搜呢,还是根据马保国这个关键字去搜呢?
当然是关键字啦!
所以爬虫,可以帮我们第一时间获取到可能会火起来的“关键字”!
俗话说得好,给你机会你不中用,如果你都知道什么是热度了却不会蹭热度…那可真是太悲哀了~
仔细看b站的鬼畜视频,有些确实做的比较复杂,但也有很多属于简单的,不去试试怎么知道能不能做出来呢,如果第一时间就做出来可能会风靡一时的视频,成为龙头,那不就成了时代的弄潮儿。
问题来了,怎么搜集这些数据?
首先
首先,今天小泽并不打算跟大家说怎么收集数据哈,今天准备跟大家说的是,怎么高效的收集数据!
这时候肯定有人要说了,我们连收集数据都不会,还怎么高效的收集数据???
那我就要问你了,在座的各位虽然很多都是处男,但是影响大家高效的输出吗??
都很快啊。
开个玩笑哈,大家都知道python的代码执行是很死的,一条一条往下执行,所以举个栗子:
import time
def english():
print('小明正在学英语...')
time.sleep(2)
print('小明已经学了两秒英语...')
def math():
print('小明正在学数学...')
time.sleep(2)
print('小明已经学了两秒数学...')
def zhexue():
print('小明正在学哲学...')
time.sleep(4)
print('小明已经学了四秒哲学...')
if __name__ == '__main__':
pass
上面小泽定义了三个方法,大家可以理解为一个人要做的事。
现在很多家长都喜欢给孩子报一些辅导班哈,就比如小明今天要先学英语,再学数学,最后再学哲学,但是经常按部就班学完之后天都黑了,想再多学几门都没时间了。
那可咋整啊?
这时候有些魔鬼爸妈就想着,如果我的孩子能cuacuacua同时学这些功课不就好了,传说中的一心多用!
一心多用
这里我们改善一下代码:
import time
def english():
print('小明正在学英语...')
time.sleep(2)
print('小明已经学了两秒英语...')
def math():
print('小明正在学数学...')
time.sleep(2)
print('小明已经学了两秒数学...')
def zhexue():
print('小明正在学哲学...')
time.sleep(4)
print('小明已经学了四秒哲学...')
if __name__ == '__main__':
start = time.time()
english()
math()
zhexue()
end = time.time()
print('小明学完所有课程啦!总用时:'+str(end-start)+'秒!')
上述代码大家应该都能看懂吧,都是基础哦!!
运行结果如下:
可以看到,我们的小明同学竟然用了8秒才学完所有课程!!
我们要教出唐三那样的孩子,就要让他学会一心多用!
有没有什么办法是能同时做到这些事的呢?
答案肯定是有的!!
那就是asyncio模块,记住这个模块哦,还有个更专业的名词,叫做异步。
async是异步的意思,io可以理解为等待的意思,asyncio=async+io
可以理解为等待的时候异步!
什么意思呢,比如说你在接水,但是接水需要10秒钟,你在这10秒钟就原地站着,这叫不异步,怎么做到异步呢?
你一边接水一边手舞足蹈,这叫异步,同样的10秒,你干了两件事,别人只干了一件,这叫优秀。
接着,你一边接水一边手舞足蹈并且把水打翻了,好家伙你直接干了三件事!
接着你可以还要干很多事,把水擦干净,因为有好多水,流了出来,流了一床的那种,没错,我家饮水机是放在床上的。
async是异步的意思,io可以理解为等待的意思,asyncio=async+io
可以理解为等待的时候异步!
async是异步的意思,io可以理解为等待的意思,asyncio=async+io
可以理解为等待的时候异步!
async是异步的意思,io可以理解为等待的意思,asyncio=async+io
可以理解为等待的时候异步!
各位自行下载模块哦,快速下载的方式在之前的博客里也有写到,看到这里了,不点个赞吗??
求求各位小哥哥小姐姐,高抬贵手给个赞吧T-T
既然有了可以让小明一边学习一边学习一边学习的模块,那我们该怎么去用呢?
async 后面跟方法
比如说…
import asyncio
import time
async def english():
print('小明正在学英语...')
time.sleep(2)
print('小明已经学了两秒英语...')
async def math():
print('小明正在学数学...')
time.sleep(2)
print('小明已经学了两秒数学...')
async def zhexue():
print('小明正在学哲学...')
time.sleep(4)
print('小明已经学了四秒哲学...')
加了async的方法,就不干净啦!
可以理解为异步方法,就跟岳掌门一样,练了辟邪剑法,已经不能用常人来形容了~
还记得岳掌门是怎么做的吗?
排除所有不利己的因素,最起码你也得是个阴阳人,才能跟我一起对吧。
所以,不要忘了还有io的存在,等待等待,等待时异步,那么什么时候要等待呢?
time.sleep() 是不是就是一个需要等待的命令呢?是的鸭!
还有什么是需要等待的呢?
比如说发起请求,获取响应数据,持久化存储,这些都是要等待的操作,都可以理解为io!
那么既然异步的方法前面要加async,等待的方法前面是不是要加io呢?
错了!东西是要加的,但是不是io,而是await!
awa
看我操作:
import asyncio
import time
async def english():
print('小明正在学英语...')
await time.sleep(2)
print('小明已经学了两秒英语...')
async def math():
print('小明正在学数学...')
await time.sleep(2)
print('小明已经学了两秒数学...')
async def zhexue():
print('小明正在学哲学...')
await time.sleep(4)
print('小明已经学了四秒哲学...')
好家伙,一堆awa,await!
这个time.sleep()呢,这期间我们是可以干任何事的哦,嘿嘿嘿。
await后面跟需要等待的事件。
await后面跟需要等待的事件。
await后面跟需要等待的事件。
但是time.sleep()是个妹子,她不想跟await这个阴阳人玩,那该怎么办呢?
阴阳人自己玩自己喽,所以我们就改成阴阳人里面自带的sleep。
import asyncio
import time
async def english():
print('小明正在学英语...')
await asyncio.sleep(2)
print('小明已经学了两秒英语...')
async def math():
print('小明正在学数学...')
await asyncio.sleep(2)
print('小明已经学了两秒数学...')
async def zhexue():
print('小明正在学哲学...')
await asyncio.sleep(4)
print('小明已经学了四秒哲学...')
虽然是阴阳人,也是不可以小瞧的啊,不掏出点大宝贝,你都看不起我!
await后面跟支持异步并且需要等待的操作。
await后面跟支持异步并且需要等待的操作。
await后面跟支持异步并且需要等待的操作。
awa
一切准备就绪,我们去执行代码:
if __name__ == '__main__':
start = time.time()
english()
math()
zhexue()
end = time.time()
print('小明学完所有课程啦!总用时:'+str(end-start)+'秒!')
好家伙,0.1秒就学完了,这是学了个p…
那这是为什么呢?我们翻译一下报错的部分:
这是翻译了个啥…
获取对象分配回溯,对象分配…各位都有对象吗?
对象分配回溯,是不是要把大家的对象都收回喽。
获取对象分配回溯,然后全部都给我。
大概意思应该就是,大家的对象统统都给我,意思就是大家都没有对象喽,也就是说大家写的对象都木大木大了,也就是说根本就没有调用对象,所以被小泽都抢走喽~
但是!
如果没有调用对象,那么这些又是什么 ?
大意了呀!
我们忘了,阴阳人有阴阳人的处理方式,如果按照常人的思考方式,你就输了!
那么,阴阳人的开启方式是什么呢:
先分析!
我们是不是有了三个学会了辟邪剑法的方法,就是可以异步的方法,并且里面要等待的命令前面也加了await,
awa
我们原本想的是,直接调用三个方法,然后他们会同时进行,对吧!
但是,然并卵。
那是为什么呢…
突然想起来,很多模块使用的时候,基本都要初始化一下的对吧,而我们用这个asyncio模块的时候,只用了async和io两个功能而已,功能!
也就是说,没有让asyncio这个模块有它自己的地盘,岳掌门再厉害,跑到别人门派里也不能一打几百几千呀,所以,我们要给阴阳人建一个自己的地盘:
# 建立一个阴阳人地盘
loop = asyncio.get_event_loop()
这样我们地盘就有了,接着问一下大家有没有玩过网页游戏,有没有遇到过某些游戏里面有很多悬赏任务,完成了一条就会消失一条,如果一直不完成就会一直在那里,直到有人完成它。
同样,我们的异步也要用这个思路去实现,建立一个任务库,存放我们的任务。
# 建立任务库
renwu = [
english(),math(),zhexue()
]
然后问题来了,这个库放在哪里?
阴阳人的地盘,阴阳人说了算:
# 提交任务库
loop.run_until_complete(asyncio.wait(renwu))
不要问我为什么要这样,规则,是他们定的,我只是一个打杂的。
来看一下整体的代码:
import asyncio
import time
async def english():
print('小明正在学英语...')
await asyncio.sleep(2)
print('小明已经学了两秒英语...')
async def math():
print('小明正在学数学...')
await asyncio.sleep(2)
print('小明已经学了两秒数学...')
async def zhexue():
print('小明正在学哲学...')
await asyncio.sleep(4)
print('小明已经学了四秒哲学...')
if __name__ == '__main__':
# 开始计时
start = time.time()
# 建立任务库
renwu = [
english(),math(),zhexue()
]
# 初始化地盘
loop = asyncio.get_event_loop()
# 放置任务
loop.run_until_complete(asyncio.wait(renwu))
# 结束计时
end = time.time()
print('小明学完所有课程啦!总用时:'+str(end-start)+'秒!')
话不多说,先运行一下吧!
妈妈再也不用担心我的学习了!!!
总之思路呢,就是在这个任务组里,每个任务都有标签,完成或者未完成,如果完成了就会被删除掉,未完成就会一直在这个任务列表里循环循环…直到完成,只要遇到有await的命令,就会跳出去看一些其他的任务,还是能理解的叭,hhh
看到这里了,点赞,收藏,关注,拜托各位了!!!
300赞更新下一期!!
各位想看什么,跟小泽说一说吧!!!
awa