2014-09-19 5 views
10

मैं किसी दिए गए पुस्तक के लिए कीमतों वाले यूआरएल उत्पन्न करने के लिए अमेज़ॅन के उत्पाद विज्ञापन API का उपयोग कर रहा हूं।पायथन urllib2.HTTPError: HTTP त्रुटि 503: वैध वेबसाइट पर सेवा अनुपलब्ध

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

जब मैं लिंक पर क्लिक करें या पता पट्टी, वेब पेज लोड ठीक पर लिंक पेस्ट: एक यूआरएल है कि मैं पैदा किया पीछा कर रहा है। हालांकि, जब मैं निम्नलिखित कोड निष्पादित मैं एक त्रुटि मिलती है: HTTP त्रुटि 503: सेवा अनुपलब्ध

url = "http://rads.stackoverflow.com/amzn/click/0415376327" 
html_contents = urllib2.urlopen(url) 

त्रुटि urllib2.HTTPError है। सबसे पहले, मुझे समझ में नहीं आता कि वेब पेज सफलतापूर्वक लोड होने के बाद भी मुझे यह त्रुटि क्यों मिलती है।

html_contents = urllib2.urlopen("http://rads.stackoverflow.com/amzn/click/0415376327") 

मैं पूरी तरह कैसे इस व्यवहार होता है पर खो गया हूँ:

इसके अलावा, एक और अजीब व्यवहार है कि मैं देखा है कि निम्नलिखित कोड कभी कभी करता है और कई बार ऐसा कहा त्रुटि नहीं देता है। क्या इस पर कोई फिक्स या काम है? मेरा लक्ष्य यूआरएल की एचटीएमएल सामग्री को पढ़ना है।

संपादित

मैं क्यों ढेर अतिप्रवाह rads.stackoverflow करने के लिए अपने कोड में अमेज़न लिंक मैं उपरोक्त बदलने के लिए मेरी कोड बदल रहा है पता नहीं है। वैसे भी, rads.stackoverflow लिंक को अनदेखा करें और उद्धरण के बीच ऊपर दिए गए मेरे लिंक का उपयोग करें।

+0

अगर मुझे गलत नहीं लगता है, तो 'rads.stackoverflow.com' एक विज्ञापन सेवा है जिसे लागू किया गया था और फिर स्क्रैप किया गया था। यह बहुत अच्छी तरह से हो सकता है कि कुछ प्रकार की उपयोग सीमा (रेफरर, क्लाइंट और क्या नहीं) – Germano

+0

कुछ यादृच्छिक कारणों से, मुझे नहीं पता कि लिंक स्टैक ओवरफ़्लो टैग को क्यों बदलता है। हालांकि, अगर मैं पता बार पर कॉपी और पेस्ट लिंक रखता हूं, तो वेबसाइट ठीक काम करती है। – user2548635

+0

आह मैं देखता हूँ! अच्छा :) यह एसओ टिप्पणी पार्सर होना चाहिए। – Germano

उत्तर

7

ऐसा इसलिए है क्योंकि अमेज़ॅन अपने डेटा तक स्वचालित पहुंच की अनुमति नहीं देता है, इसलिए वे आपके अनुरोध को अस्वीकार कर रहे हैं क्योंकि यह उचित ब्राउज़र से नहीं आया है। आप 503 प्रतिक्रिया की सामग्री को देखें, तो यह कहते हैं: क्योंकि पायथन के urllib के लिए User-Agent इतनी स्पष्ट रूप से एक ब्राउज़र नहीं है

To discuss automated access to Amazon data please contact [email protected] For information about migrating to our APIs refer to our Marketplace APIs at https://developer.amazonservices.com/ref=rm_5_sv , or our Product Advertising API at https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html/ref=rm_5_ac for advertising use cases.

यह वह जगह है। आप हमेशा User-Agent नकली बना सकते हैं, लेकिन यह वास्तव में अच्छा (या नैतिक) अभ्यास नहीं है।

एक अन्य नोट में उल्लिखित एक साइड नोट के रूप में, requests लाइब्रेरी पाइथन में HTTP पहुंच के लिए वास्तव में अच्छा है।

+0

को ठीक किया गया था, मैं उपयोगकर्ता-एजेंट का उपयोग करने के बारे में आपके बयान में देख रहा था और सोच रहा था कि मुझे urllib2 के लिए इस तरह के शीर्षलेख जोड़ने की लाइनों के साथ कुछ करने की आवश्यकता है: http://stackoverflow.com/questions/802134/changing-user- एजेंट-ऑन-urllib2-urlopen – user2548635

+0

हां, इस तरह आप उपयोगकर्ता-एजेंट को बदलते हैं। फिर, 'अनुरोध' लाइब्रेरी [यहां] (http://docs.python-requests.org/en/latest/) इसके लिए बहुत बेहतर है। – Ben

14

अमेज़ॅन urllib2 के लिए डिफ़ॉल्ट उपयोगकर्ता-एजेंट को अस्वीकार कर रहा है। stackoverflow के बारे में चिंता मत करो संपादन यूआरएल

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() 

: एक वैकल्पिक हल आप urllib2 का उपयोग करने पर जोर देते हैं, तो अनुरोध मॉड्यूल

import requests 
page = requests.get("http://rads.stackoverflow.com/amzn/click/0415376327") 
html_contents = page.text 

उपयोग करने के लिए है, यह कैसे एक हैडर यह करने के लिए नाटक किया जा सकता है । वे बताते हैं कि वे यह here कर रहे हैं।

+0

कुछ अजीब कारणों से, लिंक स्टैक ओवरफ़्लो टैग को बदलने के लिए बदल जाता है। हालांकि, अगर आप पता बार पर लिंक कॉपी और पेस्ट करते हैं, तो सब कुछ ठीक काम करता है।क्या आप यह देखने के लिए मेरे निम्न लिंक का उपयोग करके अपना उत्तर अपडेट कर सकते हैं कि यह काम करता है क्योंकि यह मेरे लिए काम नहीं करता है? – user2548635

+0

स्टैक ओवरफ़्लो लंबे लिंक को संपीड़ित कर रहा है या शायद क्लीनर फैशन में सामग्री प्रदर्शित करने के लिए कोई बाहरी लिंक है। इंटरफ़ेस पर कोड के रूप में स्वरूपित किए जा सकने वाले वास्तविक लिंक चिपकाने की सुरक्षा भेद्यता से भी यह हो सकता है। अपने असली कोड में, जो भी लिंक आपको पसंद है उसे रखें और सब कुछ ठीक काम करना चाहिए। – Spade

+0

@apadana इसे इंगित करने के लिए धन्यवाद। – Spade

संबंधित मुद्दे