当我使用Scrapy实现蜘蛛时,我想更改它的代理,以便服务器不会根据ip的频繁请求禁止我的请求。我也知道如何使用中间件使用Scrapy更改代理,或者在我请求时直接更改元。
但是,我使用包scrapy_splash来为我的Spider执行Javascript,然后发现更改代理很困难,因为我认为scrapy_splash使用代理服务器为我们呈现网站的JS。
实际上,当我仅使用Scrapy时,代理运行良好,但是当我使用scrapy_splash时却变得无用。
那么有什么方法可以为scrapy_splash的请求设置代理?
4小时后修改:
我已经在setting.py
中设置了相关设置,并将其写入了middlewares.py
中。正如我之前提到的,这仅适用于scrapy,但不适用于scrapy_splash:
class RandomIpProxyMiddleware(object):
def __init__(self, ip=''):
self.ip = ip
ip_get()
with open('carhome\\ip.json', 'r') as f:
self.IPPool = json.loads(f.read())
def process_request(self, request, spider):
thisip = random.choice(self.IPPool)
request.meta['proxy'] = "http://{}".format(thisip['ipaddr'])
这是蜘蛛中带有scrapy_splash的代码:
yield scrapy_splash.SplashRequest(
item, callback=self.parse, args={'wait': 0.5})
这是没有此插件的蜘蛛中的代码:
yield scrapy.Request(item, callback=self.parse)