2012-12-05 33 views
5

के साथ समस्या स्क्रैपिंग मैं इस तकनीक का उपयोग करने से पहले वेबसाइटों को स्क्रैप कर रहा हूं। लेकिन इस वेबसाइट के साथ यह काम नहीं कर रहा है।सुंदर सूप

import urllib2 
from BeautifulSoup import BeautifulSoup 
url = "http://www.weatheronline.co.uk/weather/maps/current?LANG=en&DATE=1354104000&CONT=euro&LAND=UK&KEY=UK&SORT=1&INT=06&TYP=sonne&ART=tabelle&RUBRIK=akt&R=310&CEL=C" 
page=urllib2.urlopen(url).read() 
soup = BeautifulSoup(page) 
print soup 

उत्पादन में वेबपेज की सामग्री होना चाहिए, लेकिन इसके बजाय मैं सिर्फ यह हो रही है:

GIF89a

का कोई भी विचार (यह भी कुछ प्रतीकों मैं यहाँ कॉपी नहीं कर सकते इस प्रकार) समस्या क्या है और मुझे कैसे आगे बढ़ना चाहिए।

उत्तर

4

but I want to know why I am getting a gif accesing the url like that and when I access it via my browser I get the website perfectly.

क्योंकि ये लोग स्मार्ट हैं और नहीं चाहते कि उनकी वेबसाइट को वेब ब्राउज़र के बाहर एक्सेस किया जाए। आपको हेडर को उपयोगकर्ता-एजेंट जोड़कर एक ज्ञात ब्राउज़र को नकली करना है। यहां एक संशोधित उदाहरण है जो काम करेगा

>>> import urllib2 
>>> opener = urllib2.build_opener() 
>>> opener.addheaders = [('User-agent', 'Mozilla/5.0')] 
>>> url = "http://www.weatheronline.co.uk/weather/maps/current?LANG=en&DATE=1354104000&CONT=euro&LAND=UK&KEY=UK&SORT=1&INT=06&TYP=sonne&ART=tabelle&RUBRIK=akt&R=310&CEL=C" 
>>> response = opener.open(url) 
>>> page = response.read() 
>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup(page) 
+0

@ अभिजीत नोट करें कि जैसे ही वे पता लगाते हैं कि आप साइट को स्क्रैप कर रहे हैं, वे केवल अपने एचटीएमएल में बदलाव कर सकते हैं जो आपके स्क्रैपिंग को तोड़ देता है। या अपने आईपी पते को ब्लॉक करें। या कोई अन्य परिवर्तन। वे नहीं चाहते हैं कि आप अपनी साइट को स्क्रैप करें। शायद आपको इसका सम्मान करना चाहिए। –

+0

@Abhijit: – John

+0

Traceback (सबसे हाल कॉल पिछले): प्रतिक्रिया = opener.open (यूआरएल) त्रुटियों रिटर्न फ़ाइल "", लाइन 1, फ़ाइल "C: \ Python27 \ lib \ urllib2.py" में, लाइन 406, खुले प्रतिक्रिया = मेथ (रिक, प्रतिक्रिया) फ़ाइल "सी: \ पायथन 27 \ lib \ urllib2.py", पंक्ति 51 9, http_response 'http', अनुरोध, प्रतिक्रिया, कोड, संदेश, hdrs) फ़ाइल "सी: \ पायथन 27 \ lib \ urllib2.py", लाइन 444, त्रुटि में स्वयं self._call_chain (* args) फ़ाइल "सी: \ पायथन 27 \ lib \ urllib2.py", पंक्ति 527, http_error_default में फ़ाइल HTTPError बढ़ाएं (req.get_full_url(), कोड, msg, hdrs, fp) HTTP त्रुटि: HTTP त्रुटि 4 03: निषिद्ध – John

0

इसका मतलब है कि आप जिस URL को एक्सेस कर रहे हैं वह एक जीआईएफ छवि है, न कि वेब पेज। वास्तव में, मैंने स्क्रिप्ट चलाई और "पृष्ठ" को एक फ़ाइल में सहेजा, और आपको 1x1 पिक्सेल सफेद (या संभवतः पारदर्शी) जीआईएफ मिल गया।

कारण आपको वास्तविक वेब ब्राउज़र के साथ यह नहीं मिलता है क्योंकि वास्तव में वे नहीं चाहते हैं कि आप इसे स्क्रैप करें।

उपयोग की अपनी शर्तों से : "आप कॉपी कर सकते हैं नहीं, पुन: पेश, पुनः प्रकाशित, डाउनलोड, पोस्ट, प्रसारण, अथवा अन्य अपनी खुद की निजी, गैर वाणिज्यिक उपयोग के अलावा किसी भी तरह से साइट की सामग्री का उपयोग करें।"

आप शायद कुछ काम के साथ एक वेब ब्राउज़र नकली हो सकता है, लेकिन मैं अभी भी आपको WeatherOnline से बात करने की सलाह दूंगा। वे चाहते हैं कि आप अपने डेटा के लिए भुगतान करें, लेकिन यदि आप ऐसा करते हैं, तो आपको निश्चित रूप से एक अच्छा एपीआई मिलेगा जिसका उपयोग आप स्क्रीन स्क्रैपिंग के बजाय कर सकते हैं।

+0

आपके उत्तर के लिए धन्यवाद। मुझे पता है, लेकिन मैं जानना चाहता हूं कि मुझे ऐसा यूआईएल क्यों मिल रहा है और जब मैं अपने ब्राउज़र के माध्यम से इसे एक्सेस करता हूं तो मुझे वेबसाइट पूरी तरह से मिलती है। – Julio

+0

@ जुलिएओ: इसे खराब करने के लिए इसे कठिन बनाना। अद्यतन उत्तर देखें। –