2012-06-06 18 views
6

में कैसे पढ़ा जाए, मैं एक संपूर्ण वेब पेज पढ़ने और इसे एक चर के लिए असाइन करने की कोशिश कर रहा हूं, लेकिन मुझे ऐसा करने में परेशानी हो रही है। वेरिएबल केवल पृष्ठ स्रोत की पहली 512 या तो लाइनों को पकड़ने में सक्षम है।एक संपूर्ण वेब पेज को एक चर

मैंने स्क्रीन पर स्रोत की सभी पंक्तियों को मुद्रित करने के लिए रीडलाइन() का उपयोग करने की कोशिश की, और इसने मुझे पूरी तरह से स्रोत दिया, लेकिन मुझे इसे रेगेक्स के साथ पार्स करने में सक्षम होना चाहिए, इसलिए मुझे इसे स्टोर करने की आवश्यकता है किसी भी तरह एक चर में। मदद?

data = urllib2.urlopen(url) 
print data 

केवल मुझे स्रोत के लगभग 1/3 देता है।

data = urllib2.urlopen(url) 
for lines in data.readlines() 
     print lines 

यह मुझे पूरा स्रोत देता है।

जैसा कि मैंने कहा, मुझे स्ट्रिंग के साथ स्ट्रिंग को पार्स करने में सक्षम होना चाहिए, लेकिन मुझे जिस भाग की आवश्यकता है वह पहले 1/3 में नहीं है, मैं अपने चर में स्टोर करने में सक्षम हूं।

+2

[डाउनलोड html पृष्ठ और उसकी सामग्री] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1825438/download-html-page-and-its-content) –

उत्तर

5

शायद आप सुंदर सूप की तलाश में हैं: http://www.crummy.com/software/BeautifulSoup/ यह अजगर के लिए एक ओपन सोर्स वेब पार्सिंग लाइब्रेरी है। शुभकामनाएँ!

4

आपको पूरी फ़ाइल को स्ट्रिंग में पढ़ने के लिए file.read() का उपयोग करने में सक्षम होना चाहिए। यह आपको पूरा स्रोत देगा। कुछ

data = urllib2.urlopen(url) 
print data.read() 

आपको संपूर्ण वेबपृष्ठ देना चाहिए।

वहां से, रेगेक्स के साथ एचटीएमएल का विश्लेषण न करें (इस प्रभाव here पर अच्छी तरह से पहना हुआ पोस्ट), लेकिन इसके बजाय एक समर्पित HTML पार्सर का उपयोग करें। वैकल्पिक रूप से, एचटीएमएल को साफ करें और इसे एक्सएचटीएमएल में परिवर्तित करें (उदाहरण के लिए एचटीएमएल टिडी के साथ), और फिर मानक ElementTree जैसे एक्सएमएल पार्सिंग लाइब्रेरी का उपयोग करें। कौन सा दृष्टिकोण सबसे अच्छा है आपके आवेदन पर निर्भर करता है।

+0

यह मैं हूँ के किसी भी अधिक नहीं देता मेरे पहले उदाहरण की तुलना में वेबपेज। – Rentafence

0

मैं पूर्ण HTML पार्सिंग के लिए रेगेक्स का उपयोग करने के बजाय आसान काम के लिए ओपनसोर्स वेब पार्सिंग लाइब्रेरी का उपयोग करने की भी सिफारिश करता हूं, किसी भी तरह से आपको url पार्सिंग के लिए रेगेक्स की आवश्यकता होती है।

0

दरअसल, print data आपको कोई HTML सामग्री नहीं देनी चाहिए क्योंकि यह केवल एक फ़ाइल सूचक है। आधिकारिक दस्तावेज https://docs.python.org/2/library/urllib2.html:

यह समारोह एक फ़ाइल जैसी वस्तु

रिटर्न यह मैं क्या मिल गया है:

print data 
<addinfourl at 140131449328200 whose fp = <socket._fileobject object at 0x7f72e547fc50>> 

readlines() रिटर्न html स्रोत की लाइनों की सूची है और आप इसे स्टोर कर सकते हैं एक स्ट्रिंग में:

import urllib2 
data = urllib2.urlopen(url) 
l = [] 
s = '' 
for line in data.readlines(): 
    l.append(line) 
s = '\n'.join(l) 

आपकी आवश्यकता के हिसाब से आप या तो सूची l या स्ट्रिंग s का उपयोग कर सकते हैं।

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