很多爬虫工作者在使用爬虫ip的过程中,经常性的会遇到一些错误代码问题,那么今天我们将从几个方便阐述常见问题解决方法,希望对初学爬虫技术的朋友有帮助。
1、远程服务器返回错误: (407) 需要身份验证,是不是爬虫ip不能用了?
答:407错误是授权错误,出现407一般有两种情况:
a:终端IP授权模式下,使用爬虫ip时进行账密验证;
b:用户名+密码授权模式下,使用爬虫ip时没有进行账密验证。
2、绑定IP授权了,浏览器设置HTTP弹出“用户名 +密码”对话框,提示要输入密码,是不是被识别了?
答:出现这种问题有两种情况:
a:终端IP授权模式下,绑定的不是使用爬虫IP的终端IP,或者绑定的不是固定出口IP;
b:“用户名+密码”授权模式下,即使在后台绑定了终端IP授权,还是会弹出“用户名+密码”对话框的。
选择终端IP授权模式,并绑定使用爬虫IP的终端IP授权(固定出口IP),则可避免这种情况的发生。
3、API文档里有上线时间、预计存活时间、地理位置等字段,但返回结果并没有,是不是还没有完善?
答:调用API默认返回格式是ip:port,只有IP和端口,若需要其他返回内容,需要在后台的“管理——设置提取格式”里设置,比如设置输出格式:{ip}:{port}|{adr},这样就会返回IP和端口还有所在的地理位置了。
4、我买了独享IP池,也绑定了终端IP授权,但是提示“该参数条件下当前没有任何爬虫ip”,是不是出问题了?
答:独享IP池需要先添加服务器,在后台的“管理服务器”,单击进入后可以选择自己想要的服务器进行添加,然后设置添加数量,数量不能高于当前线路的空闲数量,也不能高于自己购买的套餐的服务器数量。
5、我之前使用的好好的,现在突然提示“Cache Access Denied” 错误,你们的爬虫ip是不是故障了?
答:出现这种情况一般是终端IP突然变了,您可以检查下使用爬虫IP的终端IP有没有变,如果变了,需要进入后台重新绑定下,您也可以调用自动绑定IP接口进行自动绑定。
以上5个问题是最近这段时间朋友们问的比较多的几个问题,今天整理出来给新手朋友们看看,可以提前规避这些问题,避免走弯路,提高工作效率。
python使用爬虫IP发送请求代码示例
一、获取爬虫IP
很多初学者喜欢爬取网上的免费爬虫IP来使用,正规的项目中一般是采购高质量爬虫IP来使用的,通常是通过API接口来获取IP,以下列为例。
import requests
api_url = 'http://www.***.com/ShortProxy/GetIP/?api=实例ID&akey=akey&count=5×pan=3&type=1'
#华科云的API提取链接,开通产品后在后台可以生成
proxy_ip = requests.get(api_url).text
#请求API提取链接,获取http爬虫IP列表
proxy_list = proxy_ip.split('\r\n')
for proxy in proxy_list:
#遍历http爬虫IP列表
num += 1
proxies = {
'http': 'http://'+proxy,
'https': 'http://' + proxy
}
print(proxies)
二、使用爬虫IP
很多人proxies只写一个协议,在访问不同的网站时很容易报错,或者会使用本地上网IP向目标网站发送请求而不自知。
import requests
proxies = {
"http": "http://168.168.168.168:88888",
"https": "http://168.168.168.168:88888"
}
r = requests.get('https://jshk.com.cn/',proxies=proxies)
如果是访问http网站,则会采用http协议;如果是访问https网站,则会采用https协议。这里proxies两种协议都写了,发送请求时会根据访问的网站自动选择。
三、验证爬虫IP
很多人不确定爬虫IP是否生效,是使用爬虫IP发送的请求,还是本地上网IP发送的请求。我们可以访问一个查询IP的网站来进行验证。
url = "http://jshk.com.cn/ip"
proxies = {
'http':'http://168.168.168.168:88888',
'https':'http://168.168.168.168:88888'
}
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko)
Version/5.1 Safari/534.50'
}
try:
resp = requests.get(url,headers=headers,proxies=proxies,timeout=10)
print(resp.text)
except Exception as e:
print(f"请求失败,爬虫IP无效!{e}")
如果请求成功了,会打印出请求返回的内容,如果爬虫IP生效了,返回的内容中的IP是当前使用的爬虫IP;如果proxies只写了一个http或https协议,返回的内容中的IP是本地上网IP,说明没有通过爬虫IP请求网站。如果请求失败了,说明爬虫IP没有生效,会返回“请求失败,爬虫IP无效!”。