2012-11-02 17 views
11

का उपयोग करके Google विद्वान परिणामों को निकालें मैं Google विद्वान खोज परिणामों को स्क्रैप करने के लिए पायथन का उपयोग करना चाहता हूं। मुझे ऐसा करने के लिए दो अलग-अलग लिपि मिलीं, एक gscholar.py है और दूसरा scholar.py है (क्या इसे एक अजगर पुस्तकालय के रूप में उपयोग किया जा सकता है?)।पायथन (या आर)

अब, मुझे शायद यह कहना चाहिए कि मैं पाइथन के लिए बिल्कुल नया हूं, इसलिए माफ करना अगर मुझे स्पष्ट याद आती है!

समस्या जब मैं gscholar.py के रूप में README फ़ाइल में विस्तार से बताया का उपयोग है, मैं एक परिणाम

query() takes at least 2 arguments (1 given) के रूप में मिलता है। ।।

यहां तक ​​कि जब मैं एक और तर्क निर्दिष्ट (जैसे gscholar.query("my query", allresults=True), मैं

query() takes at least 2 arguments (2 given) मिल

यह पहेली मुझे मैं भी तीसरे संभव तर्क (outformat=4 निर्दिष्ट करने के लिए कोशिश की, है जो BibTex प्रारूप), लेकिन इस मुझे फ़ंक्शन त्रुटियों की एक सूची देता है। एक सहयोगी ने मुझे क्वेरी चलाने से पहले सुंदर सूप और this आयात करने की सलाह दी, लेकिन यह समस्या भी नहीं बदली है। समस्या का समाधान करने के लिए कोई सुझाव?

मुझे आर के लिए कोड मिला (देखें) एक समाधान के रूप में, लेकिन जल्दी से गूगल द्वारा अवरुद्ध हो गया। शायद कोई सुझाव दे सकता है कि अवरुद्ध होने से बचने के लिए उस कोड को कैसे सुधारें? किसी भी सहायता की सराहना की जाएगी! धन्यवाद!

+0

मैंने Google के उपयोग को अवरुद्ध करने के तरीके के बारे में अपना उत्तर अपडेट किया ... – Sheena

उत्तर

12

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

एक ब्राउज़र जानकारी के साथ वेबसाइटों तक पहुँचने के लिए, आप एक कस्टम उपयोगकर्ता एजेंट के साथ एक यूआरएल सलामी बल्लेबाज वर्ग इस्तेमाल कर सकते हैं:

from urllib import FancyURLopener 
class MyOpener(FancyURLopener): 
    version = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36' 
openurl = MyOpener().open 

और फिर आवश्यक यूआरएल डाउनलोड इस प्रकार है:

openurl(url).read() 

पुन: प्राप्त करने के लिए विद्वान परिणाम केवल http://scholar.google.se/scholar?hl=en&q=${query} यूआरएल का उपयोग करें।

एक लाए HTML फ़ाइल से जानकारी के टुकड़े को निकालने के लिए, आपको कोड के इस टुकड़े इस्तेमाल कर सकते हैं:

from bs4 import SoupStrainer, BeautifulSoup 
page = BeautifulSoup(openurl(url).read(), parse_only=SoupStrainer('div', id='gs_ab_md')) 

कोड का यह टुकड़ा एक ठोस div तत्व है कि एक Google विद्वान खोज में दिखाए गए परिणामों की संख्या में शामिल अर्क परिणाम पृष्ठ।

+1

आपने वर्जन स्ट्रिंग कैसे बनाई? –

+0

मैं इस कोड में प्रमाणपत्र के लिए पथ निर्दिष्ट कर सकता हूं? – AlwaysLearning

5

Google आपको अवरोधित करेगा ... क्योंकि यह स्पष्ट होगा कि आप ब्राउज़र नहीं हैं। अर्थात्, वे मानव गतिविधि .... के लिए बहुत जल्दी-जल्दी एक ही अनुरोध हस्ताक्षर होने वाली पहचान करेगा

आप कर सकते हैं:

  • How to make urllib2 requests through Tor in Python?
  • भागो आपके विश्वविद्यालय कंप्यूटर पर कोड (मदद नहीं कर सकता है)
  • Google scholar API का उपयोग करें, आपको पैसे मिल सकते हैं और आपको पूर्ण सुविधाएं नहीं दे सकते हैं क्योंकि आप मानव रहित नियमित उपयोगकर्ता के रूप में देख सकते हैं।
+0

मैं एक पृष्ठ प्राप्त करने का प्रयास कर रहा हूं: 'request.get (" https://scholar.google.com/scholar?q=compressed+ अंतर + हेरिस्टिक ") 'और अभी भी' <प्रतिक्रिया [503]>' – AlwaysLearning

+0

@ हमेशा के लिए सीखना, मेरे प्रारंभिक दावे का समर्थन करने के लिए धन्यवाद। – 0x90

1

यहाँ

def query(searchstr, outformat, allresults=False) 

इस प्रकार आप एक searchstr और कम से कम एक outformat निर्दिष्ट करने की आवश्यकता क्वेरी() की कॉल हस्ताक्षर है ..., और allresults एक वैकल्पिक ध्वज/तर्क है।

+0

जो उनके दस्तावेज़ीकरण के विपरीत प्रतीत होता है, सुनिश्चित नहीं है कि उस बारे में क्या कहना है .... –

+0

उत्तर के लिए धन्यवाद, लेकिन मैंने पहले से ही कोशिश की है (पर्याप्त स्पष्ट नहीं होने के लिए खेद है), उदाहरण के लिए जब मैं क्वेरी ("मेरी क्वेरी", 4, allresults = गलत) - 4 सही ढंग से समझने पर बिबटेक्स होना चाहिए - तो मुझे निम्नलिखित मिलते हैं: लाइन पर gscholar.py में फ़ंक्शन क्वेरी 66 प्रतिक्रिया = urllib2.urlopen (अनुरोध) लाइन पर urllib2.py में फ़ंक्शन urlopen 126 वापसी _opener।ओपन (यूआरएल, डेटा, टाइमआउट) लाइन पर urllib2.py में फंक्शनप्रतिक्रिया = मेथ (रिक, प्रतिक्रिया) लाइन 513 'http', अनुरोध, प्रतिक्रिया, कोड, संदेश पर urllib2.py में http_response फ़ंक्शन एचडीआरएस), आदि – Flow

+0

हम्म, लगता है जैसे आपके पास दो अलग-अलग समस्याएं हो सकती हैं। एक को कॉल हस्ताक्षर सही हो रहा है (ध्यान दें कि आउटफॉर्मैट वैकल्पिक तर्क नहीं है, आपको इसे निर्दिष्ट करना होगा)। दूसरा ऐसा लगता है कि urllib2 (यूआरएल खोलने के लिए मानक पायथन लिब) में आपके द्वारा दिए गए यूआरएल में समस्याएं आ रही हैं। –

2

COPython सही लगती है, लेकिन यहाँ उदाहरण के द्वारा एक स्पष्टीकरण का एक सा है ...

पर विचार च:

def f(a,b,c=1): 
    pass 

च एक के लिए मूल्यों की उम्मीद है और ख कोई बात नहीं क्या। आप सी खाली छोड़ सकते हैं।

f(1,2)  #executes fine 
f(a=1,b=2) #executes fine 
f(1,c=1) #TypeError: f() takes at least 2 arguments (2 given) 

तथ्य यह है कि आपको Google द्वारा अवरुद्ध किया जा रहा है, शायद आपके हेडर में आपकी उपयोगकर्ता-एजेंट सेटिंग्स के कारण है ...मैं आर के साथ अपरिचित हूँ, लेकिन मैं आप इस फिक्सिंग के लिए सामान्य एल्गोरिथ्म दे सकते हैं:

  1. उपयोग एक सामान्य ब्राउज़र (Firefox या जो कुछ भी) HTTP ट्रैफ़िक (मैं wireshark की तरह)
  2. ले टिप्पणी की निगरानी करते हुए यूआरएल तक पहुँचने के लिए उचित http अनुरोध
  3. तक स्क्रिप्ट चलाने की कोशिश है और यह भी में भेजे गए सभी हेडर की ध्यान दें शीर्षकों
  4. स्थान अंतर
  5. उपयोग करने के लिए हेडर अपने आर स्क्रिप्ट सेट आप देखा जब ब्राउज़र यातायात की जांच
3

ऐसा लगता है कि पाइथन और आर के साथ स्क्रैपिंग समस्या में चलता है जहां Google विद्वान अनुरोध में उपयोगकर्ता-एजेंट की कमी के कारण रोबोट क्वेरी के रूप में आपका अनुरोध देखता है। StackExchange में downloading all pdfs linked from a web page के बारे में एक समान प्रश्न है और उत्तर उपयोगकर्ता को पायथन में यूनिक्स और सुंदर सूप पैकेज में wget करने के लिए प्रेरित करता है।

Curl भी एक और आशाजनक दिशा प्रतीत होता है।

0

आप इस कार्य के लिए Greasemonkey का उपयोग करना चाह सकते हैं। लाभ यह है कि यदि आप अनुरोध आवृत्ति को इसके अतिरिक्त रखते हैं तो Google आपको बॉट के रूप में पहचानने में विफल रहेगा। आप अपनी ब्राउज़र विंडो में काम कर रहे स्क्रिप्ट को भी देख सकते हैं।

आप इसे स्वयं कोड करना या these स्रोतों में से किसी एक स्क्रिप्ट का उपयोग करना सीख सकते हैं।

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