使用IP代理反而爬取不了数据的问题
来源:8-6 scrapy实现ip代理池 - 1
慕粉3883702
2021-07-10
bobby老师,您好,我在使用IP代理的时候遇到一些问题。
简述:
不使用代理的时候,可以少量爬取boss直聘的数据。
使用了代理之后,无法爬取boss直聘的数据,一条也不行,先后试了阿布云和小象代理,都是如此。
尝试接入代理之后爬取知乎热榜数据,有返回结果,证明代理的接入是没有问题的。
那么问题出在哪儿呢?
附一些截图:
(1)代理的设置:
(2)尝试是否可以更换IP:
(3)用代理爬取知乎热榜
证明代理是没有问题的
(4)用代理爬取boss直聘,只会出现如下的乱码:
(5)不接代理,只添加user-agent和cookie,反而能获取到结果(但是速度较慢)
这是怎么回事呢……卡在这个地方好久了……
追加编辑,贴上代码:
“”"
(1) 不使用代理爬取boss直聘
"""
import requests
url = "https://www.zhipin.com/job_detail/846aab1aa2dbcd491nRy3dm_F1dR.html"
# 这里是直接【F12】从浏览器复制粘贴的cookie
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'cookie':'(太长了,删去)'}
res = requests.get(url=url,headers=headers)
print(res.status_code)
print(res.text)
“”"
(2) 使用代理爬取知乎热榜
"""
import requests
# 目标页面(知乎热榜)
targetUrl = "https://www.zhihu.com/hot"
# 代理服务器
proxyHost = "http-dyn.abuyun.com"
proxyPort = "9020"
# 代理隧道验证信息(通行证书和通行密钥)
proxyUser = "H4D601377P1V052D"
proxyPass = "93A1F9B59F94D644"
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
}
# 同样,直接【F12】复制cookie
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'cookie':'(太长,略去)'}
resp = requests.get(url=targetUrl,headers=headers,proxies=proxies)
print(resp.status_code)
print(resp.text)
“”"
(3) 使用代理爬取boss直聘
"""
import requests
# 目标页面
url = "https://www.zhipin.com/job_detail/846aab1aa2dbcd491nRy3dm_F1dR.html"
# 代理服务器
proxyHost = "http-dyn.abuyun.com"
proxyPort = "9020"
# 代理隧道验证信息
proxyUser = "H4D601377P1V052D"
proxyPass = "93A1F9B59F94D644"
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
}
# 同样,直接【F12】复制cookie
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'cookie':'(略)'}
resp = requests.get(url=targetUrl,headers=headers,proxies=proxies,verify=False)
print(resp.status_code)
print(resp.text)
(就是这以上三个)
注:阿布云的密钥是可用的:
2回答
-
bobby
2021-07-16
试过了,boss直聘采取了动态cookie,也就是cookie用过一段时间会失效,所以boss直聘采取的策略是:
1. 必须获取到cookie才能访问,这个可以通过selenim去获取,也可以通过逆向去分析(成本较大)
2. 将cookie和ip绑定。这样即使你拿到cookie想去切换ip也不行。这种情况你需要买阿布云的固定ip,而不是每次请求都不一样的ip
所以综合起来就是:
1. 通过阿布云去购买固定的ip
2. 让后通过selenium加上这个固定的ip代理去获取可用的cookie
3. 然后将这个可用的cookie+requests+刚才selenium请求的ip 去模拟获取
4. 这种cookie失效也比较快。所以需要你频繁的去使用selenium分析出cookie
5. 为了方便你可以逆向cookie的生成规则,不过这种方法很容易失效,好像boss直聘改这种规则还挺频繁的
爬虫不易,加油
012021-07-18 -
bobby
2021-07-12
这个问题有点意思,你把你的不使用代理的源码和使用阿布云的代理的源码都贴一下,我在本地测试运行试试
012021-07-16
相似问题