937135952 发表于 2021-10-23 14:50:10

怎么使用requests函数的proxy参数

    proxies = {
      'https':'http://'+host_proxies,
      'http':'http://'+host_proxies
      }
   
   
    headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'en-US,en;q=0.5',
    'Accept-Encoding':'gzip',
    'DNT':'1',
    'Connection':'close'
    }
    res =requests.get(url,headers=headers,proxies=proxies)

为什么会报错呢
ProxyError: HTTPConnectionPool(host='192.168.43.27', port=8080): Max retries exceeded with url: http://guba.eastmoney.com/list,600641,f_1.html (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000020C4A35FE80>: Failed to establish a new connection: 由于目标计算机积极拒绝,无法连接。')))

suchocolate 发表于 2021-10-23 14:53:40

你的用法是对的,不过看起来是代理不可用造成的报错。
你用下面的代码先验证一下代理能不能用。
1)如果代理可以用,你拿到的结果 就是代理的ip。
2)如果代理不可用,看到的将是自己的ip。
import requests


def main():
    proxy = {'http': '待验证的代理ip:端口'}
    # 如:proxy = {'http': '1.1.1.1:8080'}
    url = 'https://my.ip.cn/api/index?ip=&type=0'
    headers = {'user-agent': 'firefox', 'Referer': 'https://my.ip.cn/', 'X-Requested-With': 'XMLHttpRequest'}
    r = requests.get(url, headers=headers, proxies=proxy)
    print(r.text)


if __name__ == '__main__':
    main()

937135952 发表于 2021-10-23 20:29:37

suchocolate 发表于 2021-10-23 14:53
你的用法是对的,不过看起来是代理不可用造成的报错。
你用下面的代码先验证一下代理能不能用。
1)如果 ...

可是...这个就是我本机的ip,我用ipconfig/all查的
你的代码返回的结果是这个:{"rs":1,"code":0,"address":"美国加利福尼亚 圣何塞 ","ip":"172.68.189.15","isDomain":0}

suchocolate 发表于 2021-10-23 20:47:32

本帖最后由 suchocolate 于 2021-10-23 21:05 编辑

937135952 发表于 2021-10-23 20:29
可是...这个就是我本机的ip,我用ipconfig/all查的
你的代码返回的结果是这个:

ipconfig /all 查的是你电脑的ip,并不是你所在网络出公网时用的ip。给你个非代理与代理上网路径对比图:
从输出上看,你的ip似乎走代理是成功的。你把你的全部代码发出来,我看看你用的什么代理。

937135952 发表于 2021-10-23 22:26:28

suchocolate 发表于 2021-10-23 20:47
ipconfig /all 查的是你电脑的ip,并不是你所在网络出公网时用的ip。给你个非代理与代理上网路径对比图 ...

import requests
import bs4
   
host_proxies = "192.168.43.27:8080"
def open_url(url):
    global ip_code
    global host_proxies
    proxies = {
      'https':'http://'+host_proxies,
      'http':'http://'+host_proxies
      }
   
   
    headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language':'en-US,en;q=0.5',
    'Accept-Encoding':'gzip',
    'DNT':'1',
    'Connection':'close'
    }
    #res =requests.get(url,headers=headers)
    res =requests.get(url,headers=headers,proxies=proxies)
    print(res)
   
url ='http://guba.eastmoney.com/list,000001,f_5.html'   
open_url(url)

suchocolate 发表于 2021-10-23 22:57:46

937135952 发表于 2021-10-23 22:26


你的这个192.168.43.27是内网的代理服务器吗?

937135952 发表于 2021-10-24 08:41:02

suchocolate 发表于 2021-10-23 22:57
你的这个192.168.43.27是内网的代理服务器吗?

啊,我不太清楚啊,我用的是手机开的热点,ip是config/all查的,是在学校里。
是因为在学校里所以代理服务器是内网的这样子吗?

suchocolate 发表于 2021-10-24 09:55:32

937135952 发表于 2021-10-24 08:41
啊,我不太清楚啊,我用的是手机开的热点,ip是config/all查的,是在学校里。
是因为在学校里所以代理服 ...

是这样,一般代理是用来大规模爬取才用,为了防止被爬取的网站反扒的。
如果你是自己学习,可以不用设置代理,也可以爬取的。你可以不用proxies参数试试。

937135952 发表于 2021-10-24 10:03:04

suchocolate 发表于 2021-10-24 09:55
是这样,一般代理是用来大规模爬取才用,为了防止被爬取的网站反扒的。
如果你是自己学习,可以不用设置 ...

我就是有大规模爬取需求,访问次数多了会被屏蔽ip,网页返回504。所以用代理ip爬,代理ip的模块都写好了,就差这一步替换代理ip爬取了。但是不知道为什么用本机ip测试的时候出错了

suchocolate 发表于 2021-10-24 11:24:24

937135952 发表于 2021-10-24 10:03
我就是有大规模爬取需求,访问次数多了会被屏蔽ip,网页返回504。所以用代理ip爬,代理ip的模块都写好了 ...

你是说,192.168.43.27是你本机ip?

kifer2021 发表于 2021-10-24 13:27:46

是不是多了http?
proxies={
         'https':host_proxies
            }

937135952 发表于 2021-10-24 14:28:13

suchocolate 发表于 2021-10-24 11:24
你是说,192.168.43.27是你本机ip?

我不太懂。ipconfig/all查到的ipv4是192.168.43.27。
百度查的本机IP: 112.17.237.149
然后我百度了这两个的区别。
但是为什么我想用proxies =“” ,这两个ip时都会出现访问错误。
是因为本机ip不能用做proxies吗

937135952 发表于 2021-10-24 14:29:22

937135952 发表于 2021-10-24 14:28
我不太懂。ipconfig/all查到的ipv4是192.168.43.27。
百度查的本机IP: 112.17.237.149
然后我百度了这 ...

我想的是proxies默认值为本机ip,然后当访问被限制后,再换用代理ip池里的ip

suchocolate 发表于 2021-10-24 19:16:12

937135952 发表于 2021-10-24 14:28
我不太懂。ipconfig/all查到的ipv4是192.168.43.27。
百度查的本机IP: 112.17.237.149
然后我百度了这 ...

proxies要填代理服务器的ip,不填自己的ip,也不填你在网上查的自己的ip。
内网ip在去公网的时候,会被路由器或防火墙nat。请看我上面我画的图?
大规模爬取,那么你要准备代理池的。
页: [1]
查看完整版本: 怎么使用requests函数的proxy参数