Python urllib2.HTTPError:HTTP错误503:服务在有效网站上不可用

 那0年_277 发布于 2022-12-20 15:44

我一直在使用亚马逊的产品广告API来生成包含给定图书价格的网址.我生成的一个网址如下:

http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327

当我点击链接或粘贴地址栏上的链接时,网页加载正常.但是,当我执行以下代码时,我收到一个错误:

url = "http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327"
html_contents = urllib2.urlopen(url)

错误是urllib2.HTTPError:HTTP错误503:服务不可用.首先,我不明白为什么我甚至会因为网页成功加载而出现此错误.

此外,我注意到的另一个奇怪的行为是,以下代码有时会做,有时不会给出指定的错误:

html_contents = urllib2.urlopen("http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327")

我完全迷失了这种行为的发生方式.是否有任何修复或解决方法?我的目标是阅读网址的html内容.

编辑

我不知道为什么堆栈溢出正在改变我的代码,以便将我在上面列出的amazon链接更改为rads.stackoverflow.无论如何,忽略rads.stackoverflow链接并在引号之间使用上面的链接.

2 个回答
  • 亚马逊拒绝使用urllib2的默认用户代理.一种解决方法是使用请求模块

    import requests
    page = requests.get("http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327")
    html_contents = page.text
    

    如果你坚持使用urllib2,这就是一个标头可以伪造的方式:

    import urllib2
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    response = opener.open('http://www.amazon.com/gp/offer-listing/0415376327%3FSubscriptionId%3DAKIAJZY2VTI5JQ66K7QQ%26tag%3Damaztest04-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3D0415376327')
    html_contents = response.read()
    

    不要担心stackoverflow编辑URL.他们解释说他们在这里这样做.

    2022-12-20 15:45 回答
  • 这是因为亚马逊不允许自动访问他们的数据,因此他们拒绝您的请求,因为它不是来自适当的浏览器.如果您查看503响应的内容,它会说:

    要讨论对亚马逊数据的自动访问,请联系api-services-support@amazon.com.有关迁移到我们的API信息,请参阅我们的市场API在https://developer.amazonservices.com/ref=rm_5_sv,或者在我们的产品广告API https://affiliate-program.amazon.com/gp/advertising/api /detail/main.html/ref=rm_5_ac 用于广告用例.

    这是因为User-AgentPython的urllib显然不是浏览器.你总是可以假装User-Agent,但这不是真正的好(或道德)练习.

    作为旁注,如另一个答案所述,该requests库非常适合Python中的HTTP访问.

    2022-12-20 15:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有