python---twisted的使用,使用其模拟Scrapy
python---twisted的使用,使用其模拟Scrapy_51CTO博客_python and or的使用
https://blog.51cto.com/u_15127513/4786890
一:简单使用
一:简单使用
登录后复制
from twisted.internet import defer
from twisted.web.client import getPage
from twisted.internet import reactor
def one_done(arg):
print(arg)
def all_done(arg):
print("all done")
reactor.stop()
@defer.inlineCallbacks
def task(url):
res = getPage(bytes(url,encoding="utf-8")) #获取页面,发送http请求,是使用select池将所有socket请求保存,依据此进行计数。
print('6',type(res)) #<class 'twisted.internet.defer.Deferred'>
res.addCallback(one_done) #对每一个请求都添加一个回调方法
yield res #返回他
start_url_list = [
'http://www.baidu.com',
'http://www.github.com',
]
defer_list = []
for url in start_url_list:
v = task(url) #发送请求后立即返回,不等待返回,v是一个特殊对象,标志你发送到那个请求
print(v,type(v))
defer_list.append(v)
d = defer.DeferredList(defer_list) #将上面的特殊对象列表一起放入DeferredList
d.addBoth(all_done) #为所有对象添加回调
reactor.run() #会一直循环,我们需要在任务执行完毕后关闭。含有计数器,执行一个任务,会执行一次one_done,计数减一。单任务执行完毕,计数为0,执行all_done