首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过代理修改/更新公网IP

通过代理修改/更新公网IP
EN

Stack Overflow用户
提问于 2018-12-04 18:18:06
回答 1查看 306关注 0票数 0

我正在使用Scrapy抓取谷歌,我想改变我的IP从代码。我从输出中获得了与本地相同的公共IP,即使响应的meta中的代理正在更改。如果我转到该虚拟机并从该站点获得响应,它将显示我在request.meta['proxy'] = ip中使用虚拟机IP,但从代码中它仅显示本地公共IP

这是我的代码。

middleware.py

代码语言:javascript
复制
class ProxyMiddleware(object):
def process_request(self, request, spider):
    encoded_user_pass = base64.encodestring(('%s:%s' % (username, pass)).encode()).decode().replace('\n', '').strip()
    request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
    request.meta['proxy'] = ip

settings.py

代码语言:javascript
复制
DOWNLOADER_MIDDLEWARES = {
    'tutorial.middlewares.RotateUserAgentMiddleware': 400,
    'tutorial.middlewares.ProxyMiddleware': 100,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
}

spider1.py

代码语言:javascript
复制
 request = scrapy.Request(url='http://checkip.dyndns.org/', callback=self.check_ip)

 def check_ip(self, response):
    print(response.meta)
    pub_ip = response.xpath('//body/text()').re('\d+\.\d+\.\d+\.\d+')[0]
    print("My public IP is: " + pub_ip)

输出:

代码语言:javascript
复制
{'proxy': 'http://51.162.81.60', 'download_timeout': 360.0, 'download_slot': 'checkip.dyndns.org', 'download_latency': 19.054762840270996}
My public IP is: 118.110.179.234
EN

回答 1

Stack Overflow用户

发布于 2018-12-04 22:32:26

根据我的理解,代理ip需要是代理服务器的ip,因为在代理服务器中,您提供的ip应该是可以到达的。您不能简单地将任何随机ip分配给任何请求。如果你想轮换IP,那就完全是另一回事了。

也只是为了以防万一提到方案(http,https)和端口。不确定如果没有提到方案和端口,scrapy是否会回退到任何默认值。

另外,请参阅documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53610617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档