2011-01-02 18 views
6

में एक पृष्ठ scraping मदद मैं जावा का उपयोग कर एक वेब पेज को स्क्रैप की जरूरत है और मैं पढ़ा है कि regex यह करने का एक बहुत अक्षम तरीका है और एक यह एक डोम दस्तावेज़ में डाल दिया यह नेविगेट करने चाहिए।कुछ जावा

मैंने प्रलेखन पढ़ने की कोशिश की है लेकिन यह बहुत व्यापक लगता है और मुझे नहीं पता कि कहां से शुरू करना है।

तुम मुझे दिखा सकता है एक सरणी में this तालिका स्क्रैप करने के लिए कैसे? मैं वहां से अपना रास्ता तलाशने की कोशिश कर सकता हूं। एक स्निपेट/उदाहरण भी ठीक होगा।

धन्यवाद।

उत्तर

7

आप jsoup: Java HTML Parser आज़मा सकते हैं। यह अच्छा नमूना कोड के साथ एक उत्कृष्ट पुस्तकालय है।

+0

मैंने jSoup दस्तावेज़ों पर एक नज़र डाली और यह बहुत अच्छा दिखता है। मैं पाइथन के लिए सुंदर सूप की तर्ज पर कुछ ढूंढ रहा था और यहां यह है! –

0

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

4
  1. एक एक्सएचटीएमएल दस्तावेज़ में वेब पेज आप स्क्रैप करने के लिए कोशिश कर रहे हैं रूपांतरण। ऐसे JTidy और HTMLCleaner के रूप में जावा के साथ ऐसा करने के लिए कई विकल्प हैं। ये टूल स्वचालित रूप से विकृत HTML को भी ठीक कर देंगे (उदा।, बंद किए गए टैग बंद करें)। दोनों बहुत अच्छी तरह से काम करते हैं, लेकिन मैं जेटीडी पसंद करता हूं क्योंकि यह जावा के डोम एपीआई के साथ बेहतर एकीकृत करता है;
  2. निकालें आवश्यक XPath अभिव्यक्ति का उपयोग करते जानकारी।

यहाँ एक काम कर उदाहरण JTidy और वेब पेज आपके द्वारा दी गई तालिका से सभी फ़ाइल नाम निकालने के लिए इस्तेमाल का उपयोग कर रहा है।

public static void main(String[] args) throws Exception { 
    // Create a new JTidy instance and set options 
    Tidy tidy = new Tidy(); 
    tidy.setXHTML(true); 

    // Parse an HTML page into a DOM document 
    URL url = new URL("http://www.cs.grinnell.edu/~walker/fluency-book/labs/sample-table.html");   
    Document doc = tidy.parseDOM(url.openStream(), System.out); 

    // Use XPath to obtain whatever you want from the (X)HTML 
    XPath xpath = XPathFactory.newInstance().newXPath(); 
    XPathExpression expr = xpath.compile("//td[@valign = 'top']/a/text()"); 
    NodeList nodes = (NodeList)expr.evaluate(doc, XPathConstants.NODESET); 
    List<String> filenames = new ArrayList<String>(); 
    for (int i = 0; i < nodes.getLength(); i++) { 
     filenames.add(nodes.item(i).getNodeValue()); 
    } 

    System.out.println(filenames); 
} 

परिणाम [Integer Processing:, Image Processing:, A Photo Album:, Run-time Experiments:, More Run-time Experiments:] हो जाएगा उम्मीद है।

एक और शांत उपकरण है कि आप उपयोग कर सकते हैं Web Harvest है। यह मूल रूप से मैंने जो कुछ भी किया है, वह निष्कर्ष पाइपलाइन को कॉन्फ़िगर करने के लिए एक XML फ़ाइल का उपयोग करता है।

+0

यह एक सुरुचिपूर्ण समाधान है लेकिन कुछ सरल स्क्रैपिंग के लिए ओवरकिल है। एक बड़े वेब पेज का एक डोम बनाना काफी धीमा होगा (मूल उदाहरण एक छोटा पृष्ठ था, लेकिन सामान्यतः अधिकांश वेब पेजों में इन दिनों जटिल डीओएम होते हैं)। – monkjack

0

यदि सब आप कर रहे हैं एक datafile में कोई तालिका स्क्रैप है, regex ठीक हो जाएगा, और एक डोम दस्तावेज़ का उपयोग कर से भी बेहतर हो सकता है। डीओएम दस्तावेज़ बहुत मेमोरी का उपयोग करेंगे (विशेष रूप से वास्तव में बड़ी डेटा टेबल के लिए) ताकि आप बड़े दस्तावेज़ों के लिए शायद एक एसएक्स पार्सर चाहते हों।

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