आप जाएँ DuckDuck Go API Page, आप एपीआई का उपयोग के बारे में कुछ नोट मिल जाएगा। पहले नोट स्पष्ट रूप से है कि कहते हैं:
इस के रूप में एक शून्य-क्लिक करें जानकारी API, सबसे गहरी प्रश्नों (गैर विषय के नाम पर) खाली हो जाएगा।
एक यहाँ उन क्षेत्रों की सूची है: एक दया
Abstract: ""
AbstractText: ""
AbstractSource: ""
AbstractURL: ""
Image: ""
Heading: ""
Answer: ""
Redirect: ""
AnswerType: ""
Definition: ""
DefinitionSource: ""
DefinitionURL: ""
RelatedTopics: [ ]
Results: [ ]
Type: ""
तो यह हो सकता है, लेकिन उनके एपीआई सिर्फ परिणाम का एक समूह ट्रंकेटस और उन्हें आप को दे नहीं करता है; संभवतः तेजी से काम करने के लिए, और ऐसा लगता है कि DuckDuckGo.com का उपयोग करने के अलावा कुछ भी नहीं किया जा सकता है।
तो जाहिर है, उस मामले में एपीआई जाने का रास्ता नहीं है।
मेरे लिए, मुझे केवल एक ही रास्ता दिखाई देता है: duckduckgo.com से कच्चे HTML को पुनर्प्राप्त करना और इसका उपयोग करके इसे पार्स करना html5lib (यह उल्लेख करने लायक है कि उनके एचटीएमएल अच्छी तरह से संरचित है)।
यह भी है कि HTML पृष्ठों को पार्स,, डेटा स्क्रैप क्योंकि एचटीएमएल संरचना को बदल सकते हैं सबसे विश्वसनीय तरीका नहीं है, जबकि आम तौर पर एपीआई स्थिर रहता है जब तक परिवर्तन सार्वजनिक रूप से घोषणा कर रहे हैं उल्लेख करने के लिए लायक।
यहाँ और कैसे इस तरह के पार्स BeautifulSoup साथ प्राप्त किया जा सकता का उदाहरण:
from BeautifulSoup import BeautifulSoup
import urllib
import re
site = urllib.urlopen('http://duckduckgo.com/?q=example')
data = site.read()
parsed = BeautifulSoup(data)
topics = parsed.findAll('div', {'id': 'zero_click_topics'})[0]
results = topics.findAll('div', {'class': re.compile('results_*')})
print results[0].text
यह स्क्रिप्ट प्रिंट:
u'Eixample, an inner suburb of Barcelona with distinctive architecture'
मुख्य पृष्ठ पर प्रत्यक्ष क्वेरी किए जाने की समस्या यह है कि यह करने के लिए जावास्क्रिप्ट का उपयोग करता है आवश्यक परिणाम (संबंधित विषय नहीं) उत्पन्न करें, ताकि आप केवल परिणाम प्राप्त करने के लिए HTML संस्करण का उपयोग कर सकें।
देखते हैं कि हम क्या प्राप्त कर सकते हैं करते हैं::
site = urllib.urlopen('http://duckduckgo.com/html/?q=example')
data = site.read()
parsed = BeautifulSoup(data)
first_link = parsed.findAll('div', {'class': re.compile('links_main*')})[0].a['href']
परिणाम first_link
में संग्रहीत HTML संस्करण अलग लिंक है चर पहले परिणाम (नहीं एक relat के लिए एक लिंक है एड खोज) है कि खोज इंजन आउटपुट:
http://www.iana.org/domains/example
सभी लिंक आप पुनरावृति कर सकते हैं प्राप्त करने के लिए भर में पाए जाते दिखाई देने वाले लिंक टैग (अन्य डेटा समान तरीके से प्राप्त किया जा सकता)
for i in parsed.findAll('div', {'class': re.compile('links_main*')}):
print i.a['href']
http://www.iana.org/domains/example
https://twitter.com/example
https://www.facebook.com/leadingbyexample
http://www.trythisforexample.com/
http://www.myspace.com/leadingbyexample?_escaped_fragment_=
https://www.youtube.com/watch?v=CLXt3yh2g0s
https://en.wikipedia.org/wiki/Example_(musician)
http://www.merriam-webster.com/dictionary/example
...
ध्यान दें कि HTML-only संस्करण में केवल परिणाम हैं, और संबंधित खोज आपको जावास्क्रिप्ट का उपयोग करना होगा संस्करण। (यूआरएल में html
हिस्सा vithout)।
धन्यवाद। यह मुझे समझने में मदद करता है कि समस्या क्या है, आपको यह कहां मिला? : पी मैंने डकडकगो के नियमित एचटीएमएल पेज के लिए एक पार्सर लिखने की कोशिश की, लेकिन मुझे समस्याएं थीं क्योंकि यह जावा या कुछ का उपयोग करती है और परिणाम उचित एचटीएमएल प्रारूप में नहीं आये ... –
यह सुंदर सूप के साथ मेरे लिए ठीक काम करता है। –
उत्तर को अपडेट करेगा, यह गलत है, परिणाम आपको संबंधित खोजों से मिलता है। –