Python:爬虫使用代理ip

最近在爬某网站的时候,最开始网站不封ip 或者说 站长没有管这方面
就一直使用本地的ip,然后就导致ip被拉黑了
我能怎么办,我也很无奈呀。只好给爬虫加个代理ip咯

经过一番折腾,成功从403变为200

import requests

proxies = {
  'http': 'http://10.10.1.10:5323',
  'https': 'http://10.10.1.10:5323'
}
url = 'http://test.xxx'
response = requests.get(url,proxies = proxies)

1、首先要有一个代理ip

正好今天在v站看到这个网站,每天更新代理ip。在此感谢v友(#^.^#)

https://www.kewangst.com/ProxyList

日后准备再写个爬虫,爬取这个网站,获取自用代理ip池

2、requests加上proxies参数

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

经过折腾,自己解释一下这个参数的意思,可能有误

2.1 proxies中设置两个key : httphttps

表示http链接 会使用key值 = http 的代理,https链接 会使用key值 = https 的代理

2.2 当然你也可以只设置一个key

但是你的保证你的url协议(http|https)proxies的key值 是一致的。
如果不一致,实际就不会走代理

2.3 并且,经过测试发现,https链接 也可以使用http的代理ip

但是别忘了url协议proxies的key值 要保持一致

url = "https://ssl.com"
proxies = {
  "https": "http://10.10.1.10:1080"
}

requests.get(url, proxies=proxies)

2.4 分析原因:(当然其实也只是猜测,但是也八九不离十)

requests命令 会先判断proxies参数 里面传入的key(http/https),看它与目标url协议 是否一致,
如果url是http,proxies里面也传入了http的key,(或者同是https)。那么此时,requests就会认为代理有效,就会通过代理来访问这个url。
如果url是http,但是key是https,(或者url是https,但是key是http)。那么requests就会认为两者不匹配,就会直接去访问目标地址而不走代理。

3、proxies的其他设置

3.1 要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。

import requests

#访问url会使用代理
#访问url2不会使用代理
proxies = {'http://url.xxx': 'http://10.10.1.10:5323'}
url = 'http://url.xxx'
url2 = 'http://url2.xxx'
response = requests.get(url,proxies = proxies)

3.2 若你的代理需要使用HTTP Basic Auth,可以使用 http://user:password@host/ 语法:

proxies = {
    "http": "http://user:pass@10.10.1.10:3128/",
}

4、最后放一个网站,这个网址可以获取机器的外网ip

end

5、其他

wget下载网页的时候使用代理原理其实和requests是一样的。都是根据key和url协议是否一致来判定是否使用代理的

发表评论

邮箱地址不会被公开。 必填项已用*标注