一个用浏览器能正常打开的网页,但是用request获取json页面时对方返回以下图片不允许访问,把全部header都加上也不行,用selenium可以获取网页源码,但还是想用request获取,请教各位有知道解决的吗?
根据你提供的信息,可能是对方的服务器设置了防盗链,也就是只允许特定来源的请求访问该页面。你可以尝试在请求头中添加 Referer
字段,指定请求来源为目标网站的URL,例如:
import requests
url = 'https://example.com/json_data'
referer = 'https://example.com/'
headers = {'Referer': referer}
response = requests.get(url, headers=headers)
json_data = response.json()
如果添加 Referer
仍然无法访问,你可以尝试使用代理,或者尝试模拟浏览器行为来请求。如果使用代理也无法解决问题,那就只能使用 Selenium 或其他模拟浏览器的库来获取数据了。
可能是因为网站有反爬虫措施或防止直接访问API的安全策略
尝试使用requests库来模拟浏览器行为,包括发送与浏览器相似的请求头和模拟用户操作(如点击按钮、滚动等)。这可以通过观察浏览器开发者工具中的请求来了解所需的请求头和参数。
创建一个会话对象可以保持与网站的持续连接,从而在多个请求之间共享 cookies 和会话信息。这可以模拟用户在同一浏览器中访问多个页面时的行为。示例代码如下:
import requests
session = requests.Session()
# 添加请求头
session.headers.update({
'User-Agent': 'Your User-Agent String',
# 添加其他请求头
})
# 发送请求
response = session.get('https://example.com/json_endpoint')
引用 皆我百晓生 小程序回复内容作答:
这是对方服务器针对请求方的防护措施,阻止了你的访问。如果你有合理的访问需求,并且没有破坏对方服务器的意图,你可以尝试以下几个解决方案:
更换IP地址:使用代理服务器或者VPN来更换你的IP地址,这可能会绕过对方的封锁。
增加请求头信息:尝试使用各种常见浏览器的User-Agent头信息,并模拟真实的浏览器行为,包括Accept-Language、Referer等等。
控制请求频率:如果你是因为频繁请求被封锁,可以减少请求频率,增加请求间隔时间。
使用cookies:如果目标网站依赖于cookies进行用户认证或者其他验证,你可以通过使用session保持cookies来模拟登录状态。
尝试其他方式:如果以上方法无法解决问题,你可以考虑使用模拟人工操作的库,比如MechanicalSoup、Pyppeteer等。
需要注意的是,在解决此类问题时要遵守法律法规和网络道德,确保你的行为合法合规。
看一下这个,可能是你header配置错误了
import requests
url = "http://example.com"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, sdch",
"Accept-Language": "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
}
response = requests.get(url, headers=headers)
print(response.text)
援引讯飞星火:
这个问题可能是由于网站对请求头进行了限制,导致使用requests库无法正常获取JSON数据。你可以尝试使用以下方法绕过这个限制:
import requests
url = "目标网址"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response = requests.get(url, headers=headers)
json_data = response.json()
requests
库结合代理IP来获取JSON数据:import requests
url = "目标网址"
proxies = {
"http": "http://代理IP:端口号",
"https": "https://代理IP:端口号"
}
response = requests.get(url, proxies=proxies)
json_data = response.json()
希望这些建议能帮助你解决问题。
遇到这种情况,可能是由于对方服务器的安全策略或防爬虫机制导致的。以下是一些可能的解决方案:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
使用代理IP:尝试使用代理IP进行请求,以隐藏真实IP地址,绕过服务器的限制。可以使用一些第三方库(如 requests-proxy
)或购买付费代理服务。
解析JavaScript动态渲染页面:如果网页中的数据是通过JavaScript动态加载的,可以考虑使用Selenium等工具来渲染JavaScript并获取最终渲染后的页面内容。
应该是加了防盗链
伪装请求头:尝试使用浏览器的请求头作为 requests 的请求头,包括 User-Agent、Referer、Accept 和 Cookies,以尽可能模拟浏览器的请求。
使用 Session:使用 requests.Session() 创建一个会话对象,并在该会话中发送请求。会话对象会自动处理 Cookies,可能有助于模拟浏览器行为。