2011-03-16 13 views
5

का उपयोग कर यूआरएल की सूची से पाठ को स्क्रैप करने का सबसे आसान तरीका सुंदर सूप का उपयोग करके कुछ हद तक वेबपृष्ठों (यूआरएल की एक सूची का उपयोग करके) को केवल स्क्रैप करने का सबसे आसान तरीका क्या है? क्या यह भी संभव है?पायथन - सुंदर सूप

बेस्ट, जॉर्जीना

उत्तर

5
import urllib2 
import BeautifulSoup 
import re 

Newlines = re.compile(r'[\r\n]\s+') 

def getPageText(url): 
    # given a url, get page content 
    data = urllib2.urlopen(url).read() 
    # parse as html structured document 
    bs = BeautifulSoup.BeautifulSoup(data, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES) 
    # kill javascript content 
    for s in bs.findAll('script'): 
     s.replaceWith('') 
    # find body and extract text 
    txt = bs.find('body').getText('\n') 
    # remove multiple linebreaks and whitespace 
    return Newlines.sub('\n', txt) 

def main(): 
    urls = [ 
     'http://www.stackoverflow.com/questions/5331266/python-easiest-way-to-scrape-text-from-list-of-urls-using-beautifulsoup', 
     'http://stackoverflow.com/questions/5330248/how-to-rewrite-a-recursive-function-to-use-a-loop-instead' 
    ] 
    txt = [getPageText(url) for url in urls] 

if __name__=="__main__": 
    main() 

अब यह जावास्क्रिप्ट दूर करता है और एचटीएमएल संस्थाओं डीकोड के लिए।

+0

कमाल! बहुत बहुत धन्यवाद, @ ह्यूग बॉवेलवेल! – Georgina

1

यह पूरी तरह से संभव है। यूआरएल की सूची के माध्यम से पुन: प्रयास करना, सामग्री लोड करना, यूआरएल ढूंढना, उन्हें मुख्य सूची में जोड़ना सबसे आसान तरीका है। पर्याप्त पृष्ठ पाए जाने पर पुनरावृत्ति रोकें।

बस कुछ सुझाव:

  • urllib2.urlopen सामग्री
  • BeautifulSoup प्राप्त करने में कठिनाई के लिए: findAll ('एक') खोजने यूआरएल
+0

हाय @ जिरी - क्या आपका मतलब है "HTML खोजें"? – Georgina

+1

ठीक है, आपको पृष्ठों में यूआरएल द्वारा साइट को पार करने की आवश्यकता नहीं है। बस पाठ को पट्टी करने के लिए। आप '.join (soup.findAll (text = True)) – Jiri

+0

वाह - अच्छा कोशिश कर सकते हैं! मैं वास्तव में इसकी सराहना करता हूं ... – Georgina

1

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