2010-12-16 12 views
29

से पहला अनुच्छेद निकालें पायथन का उपयोग करके विकिपीडिया आलेख से पहला अनुच्छेद कैसे निकाला जा सकता हूं?विकिपीडिया आलेख (पायथन)

उदाहरण के लिए, अल्बर्ट आइंस्टीन के लिए, कि होगा:

अल्बर्ट आइंस्टीन (उच्चारित/ælbərt aɪnstaɪn /; जर्मन [albɐt aɪnʃtaɪn] (सुनने) 14 मार्च 1879 - अप्रैल 18 1955) एक सैद्धांतिक भौतिक विज्ञानी, दार्शनिक और लेखक जो व्यापक रूप से है सबसे प्रभावशाली और प्रतिष्ठित वैज्ञानिकों में से एक और सभी समय के बुद्धिजीवियों के रूप में माना गया था। ए जर्मन-स्विस नोबेल विजेता, आइंस्टीन को अक्सर आधुनिक भौतिकी के पिता के रूप में माना जाता है। [2] उन्हें 1 9 21 भौतिकी में नोबेल पुरस्कार "उनके सैद्धांतिक भौतिकी के लिए सेवाओं, और विशेष रूप से फोटोइलेक्ट्रिक प्रभाव के कानून की खोज के लिए प्राप्त हुआ।" [3]

+2

पृष्ठ प्राप्त करने के लिए 'urllib' और HTML को पार्स करने के लिए' सुंदर सूप '। यद्यपि ऐसा करने के अन्य तरीके हैं, फिर भी उन्हें स्टैक ओवरव्लो पर खोजें। इस पर कई बार चर्चा की गई है। – user225312

+0

आप किस मार्कअप में चाहते हैं? मीडियाविकी, एचटीएमएल? – khachik

+0

एचटीएमएल। (15 वर्ण सीमा) –

उत्तर

37

कुछ समय पहले मैं

यहाँ एक पिछले प्रश्न है कि काम का हो सकता है सादे पाठ में विकिपीडिया लेख प्राप्त करने के लिए दो कक्षाएं बनाईं। मुझे पता है कि वे सबसे अच्छा समाधान नहीं हैं, लेकिन आप अपनी आवश्यकताओं के अनुकूल कर सकते हैं:

        wikipedia.py
        wiki2plain.py

आप इसे इस तरह उपयोग कर सकते हैं:

from wikipedia import Wikipedia 
from wiki2plain import Wiki2Plain 

lang = 'simple' 
wiki = Wikipedia(lang) 

try: 
    raw = wiki.article('Uruguay') 
except: 
    raw = None 

if raw: 
    wiki2plain = Wiki2Plain(raw) 
    content = wiki2plain.text 
+1

http://pastebin.com/FVDxLWNG #REDIRECT में इसके लिए काम नहीं करता है। wikipedia.org, इसका अनुवाद इतालवी में किया जाना चाहिए, जैसे #RINVIA। मुझे संदेह है कि #REDIRECT सिर्फ अंग्रेज़ी के लिए काम करता है। "Unwiki" फ़ंक्शन के लिए –

+0

+1। बहुत अच्छे। – HerrKaputt

0

साइट और BeautifulSoup या lxml डेटा पार्स करने के लिए लाने के लिए urllib का एक संयोजन की कोशिश करो।

+0

मैं हाथ से एचटीएमएल पार्स करने में बहुत खुश हूं। Hoooo yeahhh – dzen

2

यदि आप लाइब्रेरी सुझाव चाहते हैं, BeautifulSoup, urllib2 दिमाग में आते हैं। पहले एसओ पर उत्तर दिया गया: Web scraping with Python

मैंने विकिपीडिया से एक पृष्ठ प्राप्त करने के लिए urllib2 की कोशिश की है। लेकिन, यह 403 (वर्जित) था। मीडियाविकि विकिपीडिया के लिए एपीआई प्रदान करता है, जो विभिन्न आउटपुट प्रारूपों का समर्थन करता है। मैंने पायथन-विकिटूल का उपयोग नहीं किया है, लेकिन कोशिश करने लायक हो सकता है। http://code.google.com/p/python-wikitools/

+0

सुंदर सूप – dheerosaur

+0

का उपयोग कर शायद विकिपीडिया कुछ उपयोगकर्ता को अवरुद्ध कर रहा है :) – dzen

2

सबसे पहले, मैं वादा करता हूं कि मैं snarky नहीं हूँ। Fetch a Wikipedia article with Python

इस किसी विकिपीडिया उच्च स्तर एपीआई का उपयोग कर पता चलता है, जो इस सवाल की ओर जाता है:

Is there a Wikipedia API?

1

जैसा कि अन्य ने कहा है, एक दृष्टिकोण विकीमीडिया एपीआई और urllib या urllib2 का उपयोग करना है। नीचे दिए गए कोड के टुकड़े उस हिस्से का हिस्सा हैं जो मैंने "लीड" खंड कहा जाता है, जिसमें आलेख सार और इन्फोबॉक्स है। यह जांच करेगा कि लौटाया गया पाठ वास्तविक सामग्री के बजाय रीडायरेक्ट है या नहीं, और अगर आप मौजूद हैं तो इन्फोबॉक्स को छोड़ने दें (मेरे मामले में मैंने इन्फोबॉक्स को खींचने और प्रारूपित करने के लिए अलग-अलग कोड का उपयोग किया था।

contentBaseURL='http://en.wikipedia.org/w/index.php?title=' 

def getContent(title): 
    URL=contentBaseURL+title+'&action=raw&section=0' 
    f=urllib.urlopen(URL) 
    rawContent=f.read() 
    return rawContent 

infoboxPresent = 0 
# Check if a redirect was returned. If so, go to the redirection target 
    if rawContent.find('#REDIRECT') == 0: 
     rawContent = getFullContent(title) 
     # extract the redirection title 
     # Extract and format the Infobox 
     redirectStart=rawContent.find('#REDIRECT[[')+11 
     count = 0 
     redirectEnd = 0 
     for i, char in enumerate(rawContent[redirectStart:-1]): 
      if char == "[": count += 1 
      if char == "]}": 
       count -= 1 
       if count == 0: 
        redirectEnd = i+redirectStart+1 
        break 
     redirectTitle = rawContent[redirectStart:redirectEnd] 
     print 'redirectTitle is: ',redirectTitle 
     rawContent = getContent(redirectTitle) 

    # Skip the Infobox 
    infoboxStart=rawContent.find("{{Infobox") #Actually starts at the double {'s before "Infobox" 
    count = 0 
    infoboxEnd = 0 
    for i, char in enumerate(rawContent[infoboxStart:-1]): 
     if char == "{": count += 1 
     if char == "}": 
      count -= 1 
      if count == 0: 
       infoboxEnd = i+infoboxStart+1 
       break 

    if infoboxEnd <> 0: 
     rawContent = rawContent[infoboxEnd:] 

आप, विकी मार्कअप सहित कच्चे पाठ वापस पाने रखा जाएगा ताकि आप कुछ को साफ करने की आवश्यकता होगी। यदि आप केवल पहले अनुच्छेद चाहते हैं, तो पूरे पहले खंड में नहीं, पहले नए पंक्ति चरित्र की तलाश करें।

9

मैं क्या यह है:

import urllib 
import urllib2 
from BeautifulSoup import BeautifulSoup 

article= "Albert Einstein" 
article = urllib.quote(article) 

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'Mozilla/5.0')] #wikipedia needs this 

resource = opener.open("http://en.wikipedia.org/wiki/" + article) 
data = resource.read() 
resource.close() 
soup = BeautifulSoup(data) 
print soup.find('div',id="bodyContent").p 
34

मैं एक अजगर पुस्तकालय के लिए यह बहुत आसान बनाने के लिए करना है कि लिखा था। इसे Github पर देखें।

यह स्थापित करने के लिए चलाने के

$ pip install wikipedia 

फिर एक लेख के पहले पैराग्राफ प्राप्त करने के लिए, बस wikipedia.summary समारोह का उपयोग करें।

>>> import wikipedia 
>>> print wikipedia.summary("Albert Einstein", sentences=2) 

प्रिंट

अल्बर्ट आइंस्टीन (/ ælbərt aɪnstaɪn /; जर्मन [albɐt aɪnʃtaɪn] ( सुनने) 14 मार्च 1879 - अप्रैल 18 1955) था एक जर्मन में जन्मे सैद्धांतिक भौतिक विज्ञानी, जो सापेक्षता के सामान्य सिद्धांत, आधुनिक भौतिकी के दो स्तंभों में से एक (क्वांटम यांत्रिकी के साथ) विकसित किया। जबकि अपने द्रव्यमान समकक्ष फॉर्मूला ई = एमसी 2 (जिसे "दुनिया का सबसे प्रसिद्ध समीकरण" कहा जाता है) के लिए सबसे अच्छी तरह से जाना जाता है, उन्हें भौतिकी में 1 9 21 नोबेल पुरस्कार मिला "उनकी सेवाओं के लिए सैद्धांतिक भौतिकी, और विशेष रूप से उनकी खोज के लिए फोटोइलेक्ट्रिक प्रभाव के कानून के "।

जहाँ तक यह कैसे काम करता के रूप में, wikipedia मीडियाविकि एपीआई, जो विकिपीडिया लेखों के मोबाइल अनुकूल संस्करण रिटर्न की Mobile Frontend Extension से एक अनुरोध करता। पैरामीटर prop=extracts&exsectionformat=plain पैरामीटर को पार करके, विशिष्ट होने के लिए, मीडियाविकि सर्वर विकीटेक्स्ट को पार्स करेगा और जिस लेख का आप अनुरोध कर रहे हैं उसका एक सादा पाठ सारांश वापस करें, पूरे पृष्ठ टेक्स्ट तक। यह exchars और exsentences पैरामीटर स्वीकार करता है, जो आश्चर्यजनक रूप से, एपीआई द्वारा दिए गए वर्णों और वाक्यों की संख्या को सीमित नहीं करता है।

+3

पुस्तकालय बहुत अच्छी तरह डिज़ाइन किया गया है, और उपयोग करने में बहुत आसान है! बहुत बढ़िया। :) – Kitchi

+0

क्या मैं इसे प्रॉक्सी के पीछे काम कर सकता हूं? – kuroop

+0

'prop = extracts' को 2014 में एक अलग [TextExtracts] (https://www.mediawiki.org/wiki/Extension:TextExtracts#API) एक्सटेंशन में मोबाइलफ्रेंडेंड से विभाजित किया गया था, लेकिन एपीआई कॉल अपरिवर्तित है। इस अच्छी पुस्तकालय के लिए – skierpage

0

pattern आज़माएं।

pip install pattern 

from pattern.web import Wikipedia 
article = Wikipedia(language="af").search('Kaapstad', throttle=10) 
print article.string 
6

विकिपीडिया मीडियाविकि विस्तार है कि एक एपीआई मॉड्यूल के रूप में वास्तव में यह सुविधा प्रदान करता है चलाता है। TextExtractsaction=query&prop=extracts लागू करता है जिसमें पहले एन वाक्यों और/या केवल एचटीएमएल या सादा पाठ के रूप में परिचय वापस करने के विकल्प हैं।

यहाँ एपीआई फोन आप बनाना चाहते है, यह प्रयास करें: https://en.wikipedia.org/w/api.php?action=query&prop=extracts&titles=Albert%20Einstein&exintro=&exsentences=2&explaintext=&redirects=&formatversion=2

  • action=query&prop=extracts इस जानकारी का अनुरोध करने के
  • (पूर्व) वाक्य = 2, (पूर्व) परिचय =, (पूर्व) प्लेन, मॉड्यूल के पैरामीटर हैं (अपने एपीआई दस्तावेज़ के लिए पहला लिंक देखें) सादा पाठ के रूप में परिचय से दो वाक्यों के लिए पूछ रहे हैं; एचटीएमएल के लिए बाद में छोड़ दें।
  • redirects= (सही) इसलिए यदि आप के लिए पूछना "खिताब = आइंस्टीन" आप अल्बर्ट आइंस्टीन पेज की जानकारी
  • formatversion=2 UTF-8 में एक क्लीनर प्रारूप के लिए मिल जाएगा।

विभिन्न पुस्तकालय हैं जो मीडियाविकी एक्शन एपीआई का आह्वान करते हैं, जैसे डीजींड के उत्तर में से एक, लेकिन एपीआई को स्वयं कॉल करना मुश्किल नहीं है।

Page info in search results लेखों के विवरण और लीड छवि प्राप्त करने के साथ-साथ इस पाठ निकालने के बारे में चर्चा करता है।

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