2010-05-29 15 views
11

My local airport आईई के बिना उपयोगकर्ताओं को अपमानजनक रूप से अवरुद्ध करता है, और भयानक लग रहा है। मैं एक पायथन स्क्रिप्ट लिखना चाहता हूं जो हर कुछ मिनटों में आगमन और प्रस्थान पृष्ठों की सामग्री प्राप्त करेगी, और उन्हें एक और अधिक पठनीय तरीके से दिखाएगी।सुंदर सूप: किसी विशिष्ट तालिका की सामग्री प्राप्त करें

मेरी पसंद के उपकरण mechanize साइट पर धोखा देने के लिए साइट पर धोखा देने के लिए मैं आईई का उपयोग करता हूं, और BeautifulSoup उड़ान डेटा तालिका प्राप्त करने के लिए पेजिंग पेज के लिए।

काफी ईमानदारी से, मैं सुंदर सूप दस्तावेज में खो गया, और समझ नहीं पा रहा हूं कि पूरे दस्तावेज़ से तालिका (जिसका शीर्षक मुझे पता है) कैसे प्राप्त करें, और उस तालिका से पंक्तियों की सूची कैसे प्राप्त करें।

कोई विचार?

उत्तर

25

यह आपको आवश्यक विशिष्ट कोड नहीं है, केवल सुंदर सूप के साथ काम करने का एक डेमो है। यह तालिका है जो आईडी है "टेबल 1" है और इसके सभी टी तत्व प्राप्त करता है।

html = urllib2.urlopen(url).read() 
bs = BeautifulSoup(html) 
table = bs.find(lambda tag: tag.name=='table' and tag.has_attr('id') and tag['id']=="Table1") 
rows = table.findAll(lambda tag: tag.name=='tr') 
+1

वास्तव में अच्छा है, मुझे नहीं पता था कि आप खोजने के लिए लैम्ब्स पास कर सकते हैं। – goggin13

+0

वास्तव में महान! अपने फेसबुक मेलबॉक्स की जांच करें, मैंने आपको एक संदेश भेजा है। –

+0

किसी भी विचार को किसी विशिष्ट तालिका में कैसे जाना है जब कोई आईडी या शीर्षक अलग नहीं है ... उदाहरण के लिए .. मुझे HTML फ़ाइल में तीसरी तालिका चाहिए ... (कोई अन्य संकेतक नहीं हैं)। – ihightower

6
soup = BeautifulSoup(HTML) 

# the first argument to find tells it what tag to search for 
# the second you can pass a dict of attr->value pairs to filter 
# results that match the first tag 
table = soup.find("table", {"title":"TheTitle"}) 

rows=list() 
for row in table.findAll("tr"): 
    rows.append(row) 

# now rows contains each tr in the table (as a BeautifulSoup object) 
# and you can search them to pull out the times 
+1

किसी भी विचार को किसी विशिष्ट तालिका में कैसे जाना है जब कोई आईडी या शीर्षक अलग नहीं है ... उदाहरण के लिए .. मुझे HTML फ़ाइल में तीसरी तालिका चाहिए ... (कोई अन्य संकेतक नहीं हैं)। – ihightower

+1

@हाइटॉवर: 'soup.find ('table') [2] 'आपको तीसरा' टेबल 'मिलेगा। (आप इसे करने से पहले लंबाई की जांच करना चाहते हैं, बस सुरक्षित होने के लिए।) – hamstu

-14

बस अगर आप परवाह, BeautifulSoup नहीं रह गया है बनाए रखा है, और मूल मेंटेनर lxml करने के लिए एक संक्रमण पता चलता है। Xpath बस अच्छी तरह से चाल करना चाहिए।

+1

धन्यवाद, यह जानकारी का एक बहुत उपयोगी टुकड़ा है। मैं एलएक्सएमएल की जांच करूंगा। –

+5

यह अब सत्य नहीं है। सुंदर सूप 4 वर्तमान संस्करण है, और इस उत्तर से दो साल से अधिक छोटा है। –

+0

मैं अभी सुंदर सूप का उपयोग कर रहा हूं, इसलिए यह अस्तित्व में है और पूरी तरह कार्यात्मक है। –

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