有没有懂python scrapy代理ip的老哥?

一个困扰我好几天的问题:用scrapy写的一个访问58同城的简易爬虫,在中间件里爬了很多有效的代理IP,但是在process____request方法里,代理IP不知道为什么就是不切换,一直使用的是最初成功的那个IP,明明打印的信息是已经更换了新的IP,实际访问的结果来看却还是没有更换。。。

-----这是控制台的打印:

图片说明

这是爬虫文件:xicispider.py

name = 'xicispider'
allowed_domains = ['58.com']
start_urls = ['https://www.58.com/']

def parse(self, response):
    reg = r'<title>(.*?)</title>'
    print(re.search(reg,response.text).group())
    yield scrapy.Request(url='https://www.58.com',callback=self.parsep, dont_filter=True)

def parsep(self, response):
    reg = r'<title>(.*?)</title>'
    print(re.search(reg,response.text).group())

这是中间件:middleware.py
def process_request(self,spider,request):

    ip = random.choice(self.proxies)
    print("process_request方法运行了,重新获取的ip是:--------->",ip)
    request.meta['proxy'] = ip

这是settings.py里的有关配置:

DOWNLOADER_MIDDLEWARES = {
'xici.middlewares.XiciDM': 543,
}

1个回答

你得找匿名代理才行,普通代理会通过x-forward-for参数向服务器报告被代理者的ip

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复kin_sin: 你用你的爬虫去爬网上很多的探针页,看看报告的remote_addr和x-forward-for是什么
4 个月之前 回复
kin_sin
kin_sin 代理没问题,这些都是经过测试能访问58.com的,这个问题点是中间件那边process_request里request.meta['proxy']在重新获得了代理ip的情况下,为什么没有更换,控制台明明显示已经多次切换过,但是实际的request依旧是最初成功的那个。我是不大理解这个和代理ip本身有关系吗?
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问