在Scrapy 中使用代理的情况一般分两种, 一种是本身必须启用代理才能访问的站点, 不启用代理的话结果就像图片中这样:
不启用代理根本访问不了别说提取数据了,这种情况下需要在第一次发起请求时启用代理,可以通过重写 make_requests_from_url 方法实现:
def make_requests_from_url(self, url): request = scrapy.Request(url, meta={"proxy": "http://127.0.0.1:9999"}) return request
结果:
另一种情况, 一般用来绕过IP限制的, 一些站点会限制同一IP的访问频率之类的, 这种情况只要在发起请求前使用代理即可, 比如在parse方法触发新请求时使用:
def parse(self, response): url = ... yield scrapy.Request(url, meta={"proxy": "http://127.0.0.1:9999"})
通过meta参数指定代理即可, 根据url是HTTPS的则代理也要使用HTTPS.
关键字词: