我正在使用scrapy。我想基于每个请求轮换代理并从我拥有的api获取代理返回单个代理。我的计划是向api发出请求,获取代理,然后根据以下内容使用它来设置代理:
http://stackoverflow.com/questions/4710483/scrapy-and-proxies
我将使用以下方式分配它:
request.meta['proxy'] = 'your.proxy.address';
我有以下内容:
class ContactSpider(Spider):
name = "contact"
def parse(self, response):
for i in range(1,3,1):
PR= Request('htp//myproxyapi.com', headers= self.headers)
newrequest= Request('htp//sitetoscrape.com', headers= self.headers)
newrequest.meta['proxy'] = PR
但我不确定如何使用Scrapy Request对象来执行api调用。我没有在调试时收到PR请求的响应。我是否需要在单独的函数中执行此操作并使用yield语句或我的方法是错误的?
答案 0 :(得分:1)
我是否需要在单独的函数中执行此操作并使用yield语句或我的方法是错误的?
是。 Scrapy使用回调模型。你需要:
PR
个对象返回给scrapy引擎。newrequest
。一个简单的例子:
def parse(self, response):
for i in range(1,3,1):
PR = Request(
'http://myproxyapi.com',
headers=self.headers,
meta={'newrequest': Request('htp//sitetoscrape.com', headers=self.headers),},
callback=self.parse_PR
)
yield PR
def parse_PR(self, response):
newrequest = response.meta['newrequest']
proxy_data = get_data_from_response(PR)
newrequest.meta['proxy'] = proxy_data
yield newrequest