首页 > 编程语言 >遇到问题--python--爬虫--使用代理ip第二次获取代理ip失败

遇到问题--python--爬虫--使用代理ip第二次获取代理ip失败

时间:2023-08-08 23:37:06浏览次数:49  
标签:-- ip request 代理 urllib opener proxy


情况

获取代理ip的代码

def ferch_proxy_ips():
    try:
        api = "http://dynamic.goubanjia.com/dynamic/get/12323.html?sep=3"
        response = urllib.request.urlopen(api, timeout=8)
        the_page = response.read()
        content = the_page.decode("utf8")
        print("获取代理ip" + content)
        # 按照\n分割获取到的IP
        ips = content.split('\n');
        return ips
        # 利用每一个IP
    except Exception as e:
        print(str("获取代理ip异常" + str(e)))
        content = ""
    return content

使用代理ip访问页面,使用代码如下:

def fetch_raw_respone_proxy(link,ipport):
    proxy_support = urllib.request.ProxyHandler({'http': ipport})
    opener = urllib.request.build_opener(proxy_support)
    urllib.request.install_opener(opener)
    print("使用代理ip"+ipport+"访问"+link)
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = {'User-Agent': user_agent}
    f = urllib.request.Request(link, headers=headers)
    response =  f.urlopen(api, timeout=8)
    # time.sleep(1)
    return response

当第一次获取的代理ip失效时,重新去获取,发现连接失败,排查发现重新去获取IP使用的ip 是 第一次获取到的 已经失效的ip,而不是本机ip。

理论上 两个方法是独立的,一个使用了代理,一个没使用,应该不会有影响才对。

原因

urllib.request.install_opener(opener)

如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。

解决方法

修改如下:

只使用opener.open()方法发送请求才使用自定义的代理,不影响到其他的方法,其他方法里urlopen()不使用自定义代理。

def fetch_raw_respone_proxy(link,ipport):
    proxy_support = urllib.request.ProxyHandler({'http': ipport})
    opener = urllib.request.build_opener(proxy_support)
    # urllib.request.install_opener(opener)
    print("使用代理ip"+ipport+"访问"+link)
    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
    headers = {'User-Agent': user_agent}
    f = urllib.request.Request(link, headers=headers)
    response = opener.open(f, timeout=70)
    # time.sleep(1)
    return response


标签:--,ip,request,代理,urllib,opener,proxy
From: https://blog.51cto.com/u_16218512/7013704

相关文章

  • 遇到问题--pycharm为什么py文件代码提示都没了,被当成text文件
    遇到问题pycharm为什么py文件代码提示都没了原因创建该文件时选错text文件类型,被当成text文件了删除后重新新建成py文件也没用因为text有一个名字队列,只要加入过的都会被识别成text解决方法Pycharm—>Preferences—>Editor—>FileTypes—>选到Text在RegisteredPatterns中找到......
  • python--web--让python提供api服务--aiohttp
    aiohttp介绍官网上有这样一句话介绍:AsyncHTTPclient/serverforasyncioandPython翻译过来就是基于asyncio和Python实现的异步HTTP客户端/服务器asyncio可以实现单线程并发IO操作。也就是做异步操作。如果仅用在客户端,发挥的威力不大。如果把asyncio用在服务器端,例如Web服务器......
  • js实现图片放大镜效果
    效果图代码实现过程html部分<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"><head......
  • js实现打开web页面聚焦到窗口中间
    最近在做一个图片浏览器。效果如图:现在需要一进入到页面就聚焦到图片的位置,而不需要下滑后才能查看。使用方法如下:html中<imgid="originPic"src="${signedUrl}"/><scripttype="text/javascript">$(document).ready(function(){ window.location.hash="#originPic......
  • Springmvc展示oss的图片
    公开权限的图片展示首先确定思路,存储在oss中的图片有两种权限模式,一种是公开的,这种直接通过url对应到具体某张图片即可显示。格式如下:http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>具体例子http://image-demo.oss-c......
  • python--mysql--驱动简介和使用
    本篇文章介绍Python操作MySQL的几种方式,你可以在实际开发过程中根据实际情况合理选择。MySQL-python(MySQLdb)–支持python2.xMySQL-python又叫MySQLdb,是Python连接MySQL最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持Python2.x,而且安装的时候有很多前......
  • Springboot集成使用阿里云kafka详细步骤
    明确连接认证类型首先要明确使用哪种连接认证类型Ons模式参考https://github.com/AliwareMQ/aliware-kafka-demos/tree/master/kafka-java-demo/betaOns模式的conf内容KafkaClient{com.aliyun.openservices.ons.sasl.client.OnsLoginModulerequiredAccessKey="......
  • python积累--读写文本文件实例
    读写文件是最常见的IO操作。我们经常从文件读取输入,将内容写到文件。读文件在Python中,读文件主要分为三个步骤:打开文件读取内容关闭文件一般使用形式如下:try:f=open('/path/to/file','r')#打开文件data=f.read()#读取文件内容fina......
  • aws----文件存储efs的全面了解
    efs简介AmazonElasticFileSystem可扩展的、弹性原生云NFS文件系统,每月0.08USD/GBAmazonEFS是一项完全托管的服务,让您可以轻松地在Amazon云中设置和扩展文件存储,并对其进行成本优化。只需在AWS管理控制台中单击几次,您就可以创建文件系统,供AmazonEC2实例通过文件系统......
  • 单调栈
    LargestRectangleinaHistogram经典题单调栈:保持栈内元素单调递增因为如果递减后面的元素的高度就会替换前面的元素的高度前面元素等价于多个后面元素当有新元素加入是将原先的递增序列从后往前更新答案最后使得栈保持原有性质这样可以保证每个元素只会被考虑一次,不用......