老师,scrapy使用代理api

来源:16-1 scrapyd部署scrapy项目

sjdgbhb

2019-10-03

scrapy是异步的,这个好理解,scrapy是多线程的还是多进程的呢,在哪里能看到?还有在scrapy中间件里使用request调用代理api,会不会破坏了scrapy的异步性

写回答

2回答

sjdgbhb

提问者

2019-10-08

scrapy能处理阻塞io,那么我在代码里加个sleep,或者使用selenium,这样还不会破坏异步性吗?好像会破坏,目前我写了一个代理中间件,用requests库调用的代理api,如果这不会破坏异步性,哪种写法会破坏异步,哪种不会呢

0
1
bobby
阻塞肯定能运行啊,只是写了阻塞代码会影响后续的请求的发出,使用selenium确实会破坏阻塞性,所以selenium课程中用的并不多,在模拟登陆的时候使用就行了。,毕竟登陆也不是每个请求都要做,还有一种解决更通用的是将模拟登陆分开成另一个独立的服务,这样scrapy就和这个登陆服务之间建立了一个cookie池了,这样就好多了。使用requests是同步io。如果少量使用还可以,大量使用肯定会破坏异步性的,解决办法就是使用aiohttp来替代requests
2019-10-08
共1条回复

bobby

2019-10-08

scrapy 本身并没有什么太多的多线程和多进程等,因为scrapy底层是twisted,这个框架是一个异步io框架,是基于回调实现的,并不是多线程也不是多进程,回调比多线程和多进程性能都高,但是有一个很大的限制就是不能在代码中使用阻塞io方法,不然所有的请求都会被阻塞,但是有很多库都是同步io,所以为了解决这个问题twisted在启动的时候就会启动一个线程池,可以把阻塞的方法扔到这个线程池中去执行,使用ip代理并不会破坏异步性

0
0

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5763 学习 · 6266 问题

查看课程