2012-03-05 35 views
5

मैंने अभी पाइथन का उपयोग करके वेब स्क्रैपिंग सीखना शुरू कर दिया है। हालांकि, मैं पहले से ही कुछ समस्याओं में भाग गया है।पाइथन का उपयोग कर वेब स्क्रैपिंग डेटा?

मेरा लक्ष्य वेब स्क्रैप करने के लिए fishbase.org (http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=salmon) से अलग टूना प्रजातियों के नाम

समस्या है: मैं मैं सभी प्रजातियों के नाम निकालने में असमर्थ हूं।

import urllib2 
from bs4 import BeautifulSoup 

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Tuna' 
page = urllib2.urlopen(fish_url) 

soup = BeautifulSoup(html_doc) 

spans = soup.find_all(

यहाँ से, मैं नहीं जानता कि मैं कैसे प्रजातियों के नाम निकालने के बारे में जाना होगा:

यह वही है मैं अब तक है। मैं regex (यानी soup.find_all("a", text=re.compile("\d+\s+\d+")) का उपयोग कर टैग के अंदर ग्रंथों पर कब्जा करने के बारे में सोचा है ...

किसी भी इनपुट अत्यधिक सराहना की जाएगी!

उत्तर

2

वेब पेज को देखते हुए, मैं वास्तव में के बारे में यकीन नहीं है कि कौन सी जानकारी आप, निकालना चाहते हैं हालांकि ध्यान दें कि आप आसानी से text विशेषता का उपयोग कर एक टैग में पाठ प्राप्त कर सकते हैं:।।

>>> from bs4 import BeautifulSoup 
>>> html = '<a>some text</a>' 
>>> soup = BeautifulSoup(html) 
>>> [tag.text for tag in soup.find_all('a')] 
[u'some text'] 
0

आप एक दीर्घकालिक समाधान चाहते हैं, scrapy कोशिश यह काफी सरल है और का एक बहुत करता है आपके लिए काम करें। यह बहुत अनुकूलन योग्य और एक्स्टेंसिबल है। आप xpath का उपयोग करके आवश्यक सभी यूआरएल निकाल देंगे, जो मी है अयस्क सुखद और भरोसेमंद। यदि आपको आवश्यकता हो, फिर भी स्केपर आपको फिर से उपयोग करने की अनुमति देता है।

4

साथ ही आप इस तथ्य का लाभ ले सकता है कि सभी वैज्ञानिक नाम (और केवल वैज्ञानिक नाम) <i/> टैग में कर रहे हैं:

scientific_names = [it.text for it in soup.table.find_all('i')] 

का उपयोग करते हुए बी एस और रेगुलर एक्सप्रेशन से एक वेबपेज को पार्स करने के लिए दो अलग अलग दृष्टिकोण हैं। पूर्व मौजूद है इसलिए आपको बाद वाले के साथ इतना परेशान करने की आवश्यकता नहीं है।

आपको बीएस वास्तव में क्या करता है, इस पर पढ़ना चाहिए, ऐसा लगता है कि आप इसकी उपयोगिता को कम करके आंका रहे हैं।

4

क्या jozek सुझाव सही दृष्टिकोण है, लेकिन मुझे अपना स्निपेट काम करने में नहीं मिला (लेकिन ऐसा इसलिए हो सकता है क्योंकि मैं सुंदर सूप 4 बीटा नहीं चला रहा हूं)। क्या मेरे लिए काम किया था:

import urllib2 
from BeautifulSoup import BeautifulSoup 

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Tuna' 
page = urllib2.urlopen(fish_url) 

soup = BeautifulSoup(page) 

scientific_names = [it.text for it in soup.table.findAll('i')] 

print scientific_names 
+2

दरअसल '' findAll' find_all' करने के लिए नाम दिया गया है पेप 8 अनुपालन हो। अधिक जानकारी [यहां] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#method-names)। – jcollado

1

सभी को धन्यवाद ... मैं समस्या मैं इस कोड के साथ हो रही थी हल करने में सक्षम था:

import urllib2 
from bs4 import BeautifulSoup 

fish_url = 'http://www.fishbase.org/ComNames/CommonNameSearchList.php?CommonName=Salmon' 
page = urllib2.urlopen(fish_url) 
html_doc = page.read() 
soup = BeautifulSoup(html_doc) 

scientific_names = [it.text for it in soup.table.find_all('i')] 

for item in scientific_names: 
print item 
+2

उस उत्तर को स्वीकार करना न भूलें जो आपको सही उत्तर के रूप में सबसे अधिक मदद करता है। – BioGeek

+0

... तो जो सही जवाब के रूप में जो के जवाब को चिह्नित करना उचित होगा ... इससे लोगों को यह जानने के लिए कूदने में मदद मिलती है कि किसी ने भी आपके लिए यह काम नहीं किया है। – CLaFarge

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