2009-07-23 20 views
5

मैं सोच रहा था कि क्या फॉर्मों को खोजने और परिणामों से मिलान निकालने के लिए प्रविष्टियों में टाइप करने का कार्य "स्वचालित" करना संभव है। उदाहरण के लिए, मेरे पास जर्नल लेखों की एक सूची है जिसके लिए मैं डीओआई (डिजिटल ऑब्जेक्ट आइडेंटिफायर) प्राप्त करना चाहता हूं; मैन्युअल रूप से इसके लिए मैं जर्नल लेख खोज पृष्ठ (उदाहरण के लिए, http://pubs.acs.org/search/advanced) पर जाउंगा, लेखकों/शीर्षक/वॉल्यूम (आदि) में टाइप करें और फिर आलेख को लौटाए गए परिणामों की सूची में से ढूंढें, और डीओआई और पेस्ट चुनें कि मेरी संदर्भ सूची में। मैं नियमित रूप से डेटा विश्लेषण के लिए आर और पायथन का उपयोग करता हूं (मैं आरसीआरएल पर एक पोस्ट से प्रेरित था) लेकिन वेब प्रोटोकॉल के बारे में बहुत कुछ नहीं जानता ... ऐसी चीज संभव है (उदाहरण के लिए पाइथन के सुंदर सूप जैसे कुछ का उपयोग करना?)। क्या इस कार्य के समान दूरस्थ रूप से कुछ भी करने के लिए कोई अच्छा संदर्भ है? मैं सामान्य स्क्रैपिंग के लिए वेब स्क्रैपिंग और टूल्स के बारे में सीखने में उतना ही रूचि रखता हूं जितना कि यह विशेष कार्य पूरा हो रहा है ... आपके समय के लिए धन्यवाद!खोज फ़ॉर्म भरने (और पुनर्प्राप्त) करने के लिए वेब स्क्रैपिंग?

+0

आप इस समस्या का एक अच्छा समाधान के साथ आने के लिए है? मुझे यह एक समान (डुप्लिकेट?) प्रश्न पूछने के बाद मिला है http://stackoverflow.com/questions/9711539/can-i-query-the-digital-object-identifier-for-a-list-of-citations –

+0

@ डेविड - नहीं, क्षमा करें। टिप्पणी करने के किसी भी विकल्प के साथ काफी दूर नहीं मिला है ... – hatmatrix

उत्तर

9

ब्यूटीफुल सूप कि webpages- पार्स करने के लिए बहुत अच्छा है (से जो Albahri के "संक्षेप में सी #" अनुकूलित) क्या आप क्या करना चाहते का आधा है। अजगर, पर्ल, और रूबी सब मशीनीकरण का एक संस्करण है, और है कि अन्य आधा है:

http://wwwsearch.sourceforge.net/mechanize/

मशीनीकरण चलो आप एक ब्राउज़र को नियंत्रित:

# Follow a link 
browser.follow_link(link_node) 

# Submit a form 
browser.select_form(name="search") 
browser["authors"] = ["author #1", "author #2"] 
browser["volume"] = "any" 
search_response = br.submit() 

मशीनीकरण और ब्यूटीफुल सूप के साथ आप एक है महान शुरुआत के रूप में इस त्वरित माणिक scraping गाइड में इस्तेमाल किया एक अतिरिक्त उपकरण मैं विचार था, Firebug है:

http://www.igvita.com/2007/02/04/ruby-screen-scraper-in-60-seconds/

Firebug, दस्तावेजों को पार्स आप कुछ गंभीर समय की बचत के लिए xpaths के अपने निर्माण की गति कर सकते हैं।

शुभकामनाएं!

+0

ग्रेट !! धन्यवाद - बहुत उपयोगी! – hatmatrix

+0

स्टीफन! मुझे एक जवाब चिह्नित करें! मैं एक सहकर्मी को 100 अंक तक रेसिंग कर रहा हूं :-) – mixonic

+0

मैं कोशिश कर रहा हूं! मुझे अभी एक ओपनआईडी मिली है लेकिन यह मुझे बताती है कि मुझे वोट देने के लिए 15 प्रतिष्ठा है ?? क्षमा करें, स्टैक ओवरफ्लो पर पहली बार ... क्या यह जटिल है? – hatmatrix

1
WebRequest req = WebRequest.Create("http://www.URLacceptingPOSTparams.com"); 

req.Proxy = null; 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 

// 
// add POST data 
string reqString = "searchtextbox=webclient&searchmode=simple&OtherParam=???"; 
byte[] reqData = Encoding.UTF8.GetBytes (reqString); 
req.ContentLength = reqData.Length; 
// 
// send request 
using (Stream reqStream = req.GetRequestStream()) 
    reqStream.Write (reqData, 0, reqData.Length); 

string response; 
// 
// retrieve response 
using (WebResponse res = req.GetResponse()) 
using (Stream resSteam = res.GetResponseStream()) 
using (StreamReader sr = new StreamReader (resSteam)) 
    response = sr.ReadToEnd(); 

// use a regular expression to break apart response 
// OR you could load the HTML response page as a DOM 

+0

धन्यवाद - यह जानना अच्छा है कि यह संभव है! ...मैं अनुमान लगा रहा हूँ। (.NET से बहुत परिचित नहीं है, हालांकि मुझे लगता है कि यह सभी क्रोध है ...) – hatmatrix

0

वेब स्क्रैपिंग के लिए कई टूल हैं। IMacros नामक एक अच्छी फ़ायरफ़ॉक्स प्लगइन है। यह बहुत अच्छा काम करता है और किसी भी प्रोग्रामिंग ज्ञान की आवश्यकता नहीं है। मुफ्त संस्करण यहां से डाउनलोड किया जा सकता है: https://addons.mozilla.org/en-US/firefox/addon/imacros-for-firefox/ iMacros के बारे में सबसे अच्छी बात यह है कि यह आपको मिनटों में शुरू कर सकता है, और इसे बैश कमांड लाइन से भी लॉन्च किया जा सकता है, और इसे बैश स्क्रिप्ट के भीतर से भी बुलाया जा सकता है।

एक और उन्नत कदम सेलेनियम वेबड्राइव होगा। सेलेनियम चुनने का कारण यह है कि यह शुरुआती सूट के लिए एक महान तरीके से प्रलेखित है। केवल निम्नलिखित page:

आपको किसी भी समय चलने के लिए तैयार करेगा। सेलेनियम जावा, पायथन, PHP, सी का समर्थन करता है, इसलिए यदि आप इनमें से किसी भी भाषा से परिचित हैं, तो आप आवश्यक सभी आदेशों से परिचित होंगे। मैं सेलेनियम की वेबड्राइव भिन्नता पसंद करता हूं, क्योंकि यह एक ब्राउज़र खोलता है, ताकि आप फ़ील्ड और आउटपुट देख सकें। वेबड्राइव का उपयोग करके स्क्रिप्ट स्थापित करने के बाद, आप आसानी से स्क्रिप्ट को आईडीई में माइग्रेट कर सकते हैं, इस प्रकार हेडलेस चला रहे हैं।

आदेश

sudo easy_install selenium 

यह टाइपिंग निर्भरता और सब कुछ आप के लिए आवश्यक का ख्याल रखना होगा द्वारा सेलेनियम आप कर सकते हैं स्थापित करने के लिए।

आदेश अपनी स्क्रिप्ट सहभागी को चलाने के लिए, बस एक टर्मिनल खोलें, और टाइप

python 

आप अजगर संकेत दिखाई देगा में, >>> और आप आदेशों में लिख सकते हैं।

यहाँ एक नमूना कोड जो आप टर्मिनल में पेस्ट कर सकते हैं, यह शब्द चीज

package org.openqa.selenium.example; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.WebDriverWait; 

public class Selenium2Example { 
    public static void main(String[] args) { 
     // Create a new instance of the Firefox driver 
     // Notice that the remainder of the code relies on the interface, 
     // not the implementation. 
     WebDriver driver = new FirefoxDriver(); 

     // And now use this to visit Google 
     driver.get("http://www.google.com"); 
     // Alternatively the same thing can be done like this 
     // driver.navigate().to("http://www.google.com"); 

     // Find the text input element by its name 
     WebElement element = driver.findElement(By.name("q")); 

     // Enter something to search for 
     element.sendKeys("Cheese!"); 

     // Now submit the form. WebDriver will find the form for us from the element 
     element.submit(); 

     // Check the title of the page 
     System.out.println("Page title is: " + driver.getTitle()); 

     // Google's search is rendered dynamically with JavaScript. 
     // Wait for the page to load, timeout after 10 seconds 
     (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver d) { 
       return d.getTitle().toLowerCase().startsWith("cheese!"); 
      } 
     }); 

     // Should see: "cheese! - Google Search" 
     System.out.println("Page title is: " + driver.getTitle()); 

     //Close the browser 
     driver.quit(); 
    }} 

मुझे आशा है कि यह आप आरंभिक बढ़त दे सकता है के लिए गूगल खोज करेंगे है।

चीयर्स :)

+0

सबसे पहले आप उपयोगकर्ता को पायथन के लिए सेलेनियम क्लाइंट स्थापित करने के लिए कह रहे हैं; लेकिन आपका कोड-उदाहरण जावा कोड है। यह भ्रामक है। – knb

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