众所周知,通过使用代理IP,网络爬虫可以伪装成不同的IP地址,以模拟不同的用户访问行为,从而更好地抓取网页数据。
然而,在使用代理IP进行爬虫工作一会儿后,还是被限制访问了。在通过测试后发现,代理IP并没有生效,是通过本地IP发出的请求,这是怎么回事呢?
在Python的requests库中,我们可以通过proxies参数来设置代理,为HTTP和HTTPS协议分别提供了代理IP和端口。
在调用requests.get()函数时,我们无需特别指定要使用哪个协议的代理,因为requests库会自动根据提供的URL,来判断应该使用哪个协议的代理。
以下是一个python使用代理请求的代码示例:
import requests proxies = { "http":"http://ip:port", "https":"http://ip:port", } url = "https://www.zdaye.com" # 这里请替换为你要访问的URL response = requests.get(url, proxies=proxies) print(response.text)
在这个示例中,如果url是http开头的,那么requests库会自动选择使用"http"的代理;如果是https开头的,那么会自动选择使用"https"的代理。
如果没有为特定的协议设置代理,requests库会尝试使用默认的代理设置,这可能取决于客户端的网络环境或代理服务器的配置。如果没有可用的代理,requests库会直接使用本地IP来访问目标URL。
如果使用代理IP后,却还是通过本地IP请求,那么就有以下三种情况:
1、proxies里只设置了http协议的代理IP,但requests.get()是请求https网站。因为没有合适的协议的代理IP,requests库会直接使用本地IP来访问目标URL。
例如:
proxies = { "http":"http://ip:port", } response = requests.get("https://www.zdaye.com", proxies=proxies)
2、proxies里只设置了https协议的代理IP,但requests.get()是请求http网站。因为没有合适的协议的代理IP,requests库会直接使用本地IP来访问目标URL。
例如:
proxies = { "https":"http://ip:port", } response = requests.get("https://www.zdaye.com", proxies=proxies)
3、proxies里协议全都设置错误,没有可匹配的协议,不管访问什么协议的网站,requests库会直接使用本地IP来访问目标URL。
例如:
proxies = { "http:":"http://ip:port", "https:":"http://ip:port", } response = requests.get("https://www.zdaye.com", proxies=proxies)
在使用代理IP访问网站时,我们必须特别小心。每一个细小的差别,都可能导致完全不同的结果。
代理IP能帮我们隐藏真实IP地址,避免被目标网站封禁或限制访问,但若设置不当,则可能依然会暴露本地IP。所以,确保proxies设置正确,非常重要。