2009-04-03 23 views
7

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

उत्तर

6

आप jQuery से परिचित हैं आप pQuery है, जो यह बहुत आसान बना देता है की जाँच करने के लिए चाहते हो सकता है:

## print every <h2> tag in page 
use pQuery; 

pQuery("http://google.com/search?q=pquery") 
    ->find("h2") 
    ->each(sub { 
     my $i = shift; 
     print $i + 1, ") ", pQuery($_)->text, "\n"; 
    }); 

वहाँ भी HTML::DOM है।

जो भी आप करते हैं, हालांकि, इसके लिए नियमित अभिव्यक्तियों का उपयोग न करें।

4

मैंने अतीत में HTML Table Extract का उपयोग किया है। मुझे व्यक्तिगत रूप से इसका उपयोग करने के लिए थोड़ा बेवकूफ़ लगता है, लेकिन हो सकता है कि मैं ऑब्जेक्ट मॉडल को अच्छी तरह समझ नहीं पाया। मैं आमतौर पर डेटा की जांच करने के लिए मैन्युअल के इस भाग का उपयोग करें:

use HTML::TableExtract; 
$te = HTML::TableExtract->new(); 
$te->parse($html_string); 

    # Examine all matching tables 
    foreach $ts ($te->tables) { 
     print "Table (", join(',', $ts->coords), "):\n"; 
     foreach $row ($ts->rows) { 
      print join(',', @$row), "\n"; 
     } 
    }` 
+0

एचटीएमएल :: TableExtract काफी जादुई है।एक शानदार विशेषता हेडर कोशिकाओं की सामग्री निर्दिष्ट करके तालिकाओं का चयन करने में सक्षम है और केवल उन स्तंभों को रखने में सक्षम है जो आप रुचि रखते हैं। –

0

मैं अपनी स्क्रीन के सबसे जरूरतों scraping के लिए LWP::UserAgent का उपयोग करें। यदि आपको कुकीज़ समर्थन की आवश्यकता है तो आप HTTP::Cookies के साथ भी जोड़ सकते हैं।

स्रोत प्राप्त करने के तरीके पर एक सरल उदाहरण यहां दिया गया है।

use LWP; 
use HTTP::Cookies; 
my $cookie_jar = HTTP::Cookies->new; 
my $browser = LWP::UserAgent->new; 
$browser->cookie_jar($cookie_jar); 

$resp = $browser->get("https://www.stackoverflow.com"); 
if($resp->is_success) { 
    # Play with your source here 
    $source = $resp->content; 
    $source =~ s/^.*<table>/<table>/i; # this is just an example 
    print $source;      # not a solution to your problem. 
} 
3

हालांकि मैं आम तौर पर LWP/LWP::Simple के साथ इस किया है, पर्ल में स्क्रैप वेबपेज के किसी भी प्रकार के लिए मौजूदा 'पसंदीदा' मॉड्यूल WWW::Mechanize है।

+0

डेविड: क्या आप इस पर विस्तार कर सकते हैं। मैंने हमेशा सोचा था कि WWW :: मशीनीकरण स्वचालित परीक्षण के लिए अधिक था। क्या यह ऊपर कटौती करता है? –

+0

डब्ल्यूडब्ल्यूडब्ल्यू :: मैकेनाइजेशन किसी वेबसाइट के साथ किसी प्रकार की बातचीत के लिए है। इसे स्वचालित परीक्षण पर कभी लक्षित नहीं किया गया था। –

+0

हालांकि, टेस्ट :: डब्ल्यूडब्ल्यूडब्ल्यू :: मैकेनाइज * * स्वचालित परीक्षण पर लक्षित है। यह WWW :: मैकेनाइजेशन के चारों ओर एक रैपर है। –

2

यदि आप XPath से परिचित हैं, तो आप HTML::TreeBuilder::XPath का भी उपयोग कर सकते हैं। और अगर आप नहीं कर रहे हैं ... अच्छी तरह से आप होना चाहिए; -)

1

मैं एक मरे हुए धागा लेकिन इस सूत्र भर googling किसी को खींचें करने के लिए भी WWW::Scripter चेकआउट चाहिए मतलब यह नहीं है -

खुश दूरदराज के डेटा एकत्र करना 'पटकथा वेब साइटों कि स्क्रिप्ट के लिए';)

1

लें जादुई Web::Scraper पर एक नज़र डालें, यह वेब स्क्रैपिंग के लिए उपकरण है।

0

चेक बाहर पर्ल के साथ scraping वेब का यह छोटा उदाहरण: link text

2

आप भी इस सरल पर्ल मॉड्यूल वेब इस्तेमाल कर सकते हैं :: स्क्रैपर, इस बात को समझ और मेरे लिए जीवन आसान बनाने के लिए सरल है। अधिक जानकारी के लिए इस उदाहरण का पालन करें।

http://teusje.wordpress.com/2010/05/02/web-scraping-with-perl/

+0

जीवन इतना आसान हो सकता है :-) – juFo

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