HTML स्क्रैपिंग के लिए विकल्प? [बन्द है]


406

मैं सुंदर सूप की कोशिश कर रहा हूँ , HTML स्क्रैपिंग के लिए एक पायथन पैकेज। क्या कोई अन्य HTML स्क्रैपिंग पैकेज है जिसे मुझे देखना चाहिए? अजगर एक आवश्यकता नहीं है, मैं वास्तव में अन्य भाषाओं के बारे में भी सुनने में दिलचस्पी रखता हूं।

अब तक की कहानी:



टैग सूप लिंक मर चुका है।
तापर 7

HtmlUnit एक पूर्ण जावा ब्राउज़र कार्यान्वयन है जिसे आप भागों में विच्छेदित नहीं कर सकते हैं (आप सिर्फ एक html पृष्ठ डाउनलोड नहीं कर सकते हैं और इसे परिमार्जन नहीं कर सकते हैं , यह सभी संदर्भित फ़ाइलों को डाउनलोड करेगा, स्क्रिप्ट निष्पादित करेगा, आदि)। जैसा कि मुझे नहीं लगता कि यह यहाँ है।
मार्क जेरोनिमस

स्टॉक जावा एक्सपीथ एक्सप्रेशंस के साथ HTML चल सकता है, हालांकि मुद्दों के बिना नहीं। गलत HTML पर पार्सर भाग (DocumentBuilder) चोक करता है, और 100% सही HTML वास्तव में वेब पर काफी दुर्लभ है। इसलिए मैं पार्सर को जेटी के साथ बदलना पसंद करता हूं । XPath के लिए, जावा के अपने XPathExpressionका उपयोग किया जा सकता है (जो जावा 1.5 के बाद से मौजूद है)
मार्क जेरोनिमस

जवाबों:



44

.NET की दुनिया में, मैं HTML चपलता पैक की सलाह देता हूं। उपरोक्त विकल्पों में से कुछ के समान सरल नहीं है (जैसे HTMLSQL), लेकिन यह बहुत लचीला है। यह आपको खराब तरीके से HTML का निर्माण करने की अनुमति देता है जैसे कि यह अच्छी तरह से एक्सएमएल का गठन किया गया था, इसलिए आप XPATH या सिर्फ पुनरावृत्त नोड्स का उपयोग कर सकते हैं।

http://www.codeplex.com/htmlagilitypack


2
इसके साथ linq गठबंधन करें और यह HTMLSQL की तरह लगता है, नहीं?
आशीर्वाद याहु

3
इसके साथ SharpQuery को मिलाएं, और यह सिर्फ jQuery की तरह हो जाता है! code.google.com/p/sharp-query
एमपीएन

1
HTML चपलता पैक मेरे द्वारा आजमाए गए कई HTML दस्तावेज़ों के लिए DOM को सही ढंग से बनाने में विफल रहता है।
ऐश बर्लिन-टेलर

37

सुंदर स्क्रैप HTML स्क्रैपिंग के लिए जाने का एक शानदार तरीका है। मेरी पिछली नौकरी ने मुझे बहुत कम कर दिया था और मेरी इच्छा थी कि जब मैं शुरू करूँ तो मैं ब्यूटीफुल के बारे में जानता था। यह बहुत अधिक उपयोगी विकल्पों के साथ DOM की तरह है और बहुत अधिक पायथोनिक है। यदि आप रूबी को आज़माना चाहते हैं तो उन्होंने सुंदरसुपे को रुबीफुलसप कहते हुए चित्रित किया लेकिन यह कुछ समय में अपडेट नहीं किया गया।

अन्य उपयोगी उपकरण HTMLParser या sgmllib.SGMLParser हैं जो मानक पायथन लाइब्रेरी का हिस्सा हैं। हर बार जब आप किसी टैग में प्रवेश करते हैं / बाहर निकलते हैं और HTML पाठ का सामना करते हैं तो कॉलिंग विधि से काम करते हैं। यदि आप उस से परिचित हैं तो वे एक्सपैट की तरह हैं। ये लाइब्रेरी विशेष रूप से उपयोगी हैं यदि आप बहुत बड़ी फ़ाइलों को पार्स करने जा रहे हैं और एक डोम ट्री बनाना लंबा और महंगा होगा।

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


21

मैंने पाया कि HTMLSQL स्क्रीनसेक करने के लिए एक हास्यास्पद सरल तरीका है। इसके साथ परिणाम प्राप्त करने में सचमुच मिनट लगते हैं।

ये प्रश्न अति-सहज हैं - जैसे:

SELECT title from img WHERE $class == 'userpic'

अब कुछ अन्य विकल्प हैं जो समान दृष्टिकोण लेते हैं।


7
FYI करें, यह एक PHP पुस्तकालय है
ट्रिस्टन हवेलिक

19

अजगर lxml पुस्तकालय में कार्य करता है एक pythonic libxml2 और libxslt पुस्तकालयों के लिए बाध्यकारी है। मुझे विशेष रूप से इसका एक्सपीथ सपोर्ट और इन-मेमोरी एक्सएमएल संरचना का सुंदर-मुद्रण पसंद है। यह टूटे हुए HTML को पार्स करने का भी समर्थन करता है। और मुझे नहीं लगता कि आप अन्य पायथन लाइब्रेरी / बाइंडिंग पा सकते हैं जो XML को lxml से अधिक तेजी से पार्स करते हैं।



16

पाइथन में बीटफुल सूप के अलावा HTML स्क्रैपिंग के कई विकल्प हैं। यहाँ कुछ अन्य हैं:

  • यंत्रीकृत : पर्ल के समान WWW:Mechanize। आपको वेब पेज के साथ ऑब्जेक्ट को निष्क्रिय करने के लिए एक ब्राउज़र देता है
  • lxml : पायथन बाइंडिंग libwww। तत्वों को चुनने और चयन करने के लिए विभिन्न विकल्पों का समर्थन करता है (जैसे XPath और CSS चयन)
  • स्क्रैपमार्क : HTML से informations निकालने के लिए टेम्प्लेट का उपयोग करके उच्च स्तरीय लाइब्रेरी।
  • pyquery : आपको XML दस्तावेजों पर प्रश्नों की तरह jQuery बनाने की अनुमति देता है।
  • स्क्रैपी : एक उच्च स्तरीय स्क्रैपिंग और वेब क्रॉलिंग फ्रेमवर्क। इसका उपयोग मकड़ियों को लिखने, डेटा खनन के लिए और निगरानी और स्वचालित परीक्षण के लिए किया जा सकता है

1
पायथन स्टैंडर्ड लाइब्रेरी में एक अंतर्निहित HTML पार्सर है ... बस इसका उपयोग क्यों नहीं किया जाता है? docs.python.org/2.7/library/htmlparser.html
ArtOfWarfare

14

'सिंपल HTML DOM Parser' PHP के लिए एक अच्छा विकल्प है, अगर आपका jQuery या जावास्क्रिप्ट चयनकर्ताओं से परिचित है तो आप खुद को घर पर पाएंगे।

इसे यहां खोजें

यहाँ इसके बारे में एक ब्लॉग पोस्ट भी है।


1
मैं यह एक दूसरा। बस इसे काम करने के लिए वेब सर्वर में किसी भी mod_python, आदि को स्थापित करने की आवश्यकता नहीं है
ब्रॉक वुल्फ


11

Templatemaker एड्रियन होलोवेटी (का से उपयोगिता Django प्रसिद्धि) एक बहुत ही दिलचस्प दृष्टिकोण का उपयोग करता: आप इसे एक ही पृष्ठ के रूपांतरों और यह "सीखता" जहां चर डेटा के लिए "छेद" कर रहे हैं फ़ीड। यह HTML विशिष्ट नहीं है, इसलिए यह किसी भी अन्य सादे सामग्री को भी स्क्रैप करने के लिए अच्छा होगा। मैंने इसे पीडीएफ के लिए भी इस्तेमाल किया है और HTML को प्लेनटेक्स्ट (क्रमशः pdftotext और lynx के साथ) में बदल दिया है।


बड़े HTML पृष्ठों के लिए आपको खाका बनाने का काम कैसे मिला? जब मैंने इसे कुछ भी गैर-तुच्छ दिया तो मुझे यह क्रैश लगा।
होजु

मुझे लगता है कि मेरे पास कोई बड़ा HTML पृष्ठ नहीं है। कोई दायर मुद्दे पर है कि समस्या के लिए मौजूद लगते code.google.com/p/templatemaker/issues/list तो यह शायद वहाँ एक परीक्षण मामला भेजने के लिए उपयुक्त है। ऐसा नहीं लगता कि एड्रियन पुस्तकालय को बनाए रख रहा है। मुझे आश्चर्य है कि वह आजकल EveryBlock पर क्या उपयोग करता है क्योंकि वे निश्चित रूप से बहुत स्क्रैपिंग करते हैं।
अकाईहोल

10

मैं स्क्रीन-स्क्रैपर को जानता हूं और पसंद करता हूं ।

स्क्रीन-स्क्रैपर वेबसाइटों से डेटा निकालने का एक उपकरण है। स्क्रीन-स्क्रैपर स्वचालित:

* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)

सामान्य उपयोग:

* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data

तकनीकी:

* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers

स्क्रीन-स्क्रैपर के तीन संस्करण:

* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.

दुर्भाग्य से बेसिक वर्जन FOSS भी नहीं है। यह केवल बीयर की तरह ही मुफ्त लगता है।
एंड्रियास कुक्कट्ज़

9

मैं पहले पता लगाऊंगा कि साइट (साइट) प्रश्न में एक एपीआई सर्वर या आरएसएस फ़ीड प्रदान करती है जो आपको आवश्यक डेटा तक पहुंच के लिए है।


8

विशेष रूप से जूतों और खुबानी के साथ स्टैक ओवरफ्लो को स्क्रैप करना आसान है ।

require 'hpricot'

Shoes.app :title => "Ask Stack Overflow", :width => 370 do
  SO_URL = "http://stackoverflow.com"
  stack do
    stack do
      caption "What is your question?"
      flow do
        @lookup = edit_line "stackoverflow", :width => "-115px"
        button "Ask", :width => "90px" do
          download SO_URL + "/search?s=" + @lookup.text do |s|
            doc = Hpricot(s.response.body)
            @rez.clear()
            (doc/:a).each do |l|
              href = l["href"]
              if href.to_s =~ /\/questions\/[0-9]+/ then
                @rez.append do
                  para(link(l.inner_text) { visit(SO_URL + href) })
                end
              end
            end
            @rez.show()
          end
        end
      end
    end
    stack :margin => 25 do
      background white, :radius => 20
      @rez = stack do
      end
    end
    @rez.hide()
  end
end

8

पर्ल के लिए एक और विकल्प होगा वेब :: स्क्रेपर जो रूबी की स्क्रेपी पर आधारित है । संक्षेप में, अच्छा और संक्षिप्त वाक्यविन्यास के साथ, आप सीधे डेटा संरचनाओं में एक मजबूत खुरचनी प्राप्त कर सकते हैं।


7

मुझे जावा में HtmlUnit के साथ कुछ सफलता मिली है । यह वेब यूआई पर इकाई परीक्षण लिखने के लिए एक सरल ढांचा है, लेकिन HTML स्क्रैपिंग के लिए समान रूप से उपयोगी है।


यदि आप कभी आवश्यकता हो तो आप जावास्क्रिप्ट निष्पादन का मूल्यांकन करने के लिए भी इसका उपयोग कर सकते हैं :)
डेविड




5

मैं रूबी पर हरिकोट का इस्तेमाल करता हूं। एक उदाहरण के रूप में यह कोड का एक स्निपेट है जिसका उपयोग मैं अपने HireThings खाते के छह पृष्ठों से सभी पुस्तक के शीर्षक प्राप्त करने के लिए करता हूं (क्योंकि वे इस जानकारी के साथ एक भी पृष्ठ प्रदान नहीं करते हैं):

pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
  pagerange.each do |page|
    resp, data = http.get "/perth_dotnet?page=#{page}" 
    if resp.class == Net::HTTPOK
      (Hpricot(data)/"h3 a").each { |a| puts a.innerText }
    end
  end
end 

यह बहुत पूरा हो गया है। इससे पहले आने वाले सभी पुस्तकालय आयात और मेरे प्रॉक्सी के लिए सेटिंग्स हैं।


5

मैंने पाइथन के साथ सुंदर सूप का उपयोग किया है। यह नियमित अभिव्यक्ति जाँच से बहुत बेहतर है, क्योंकि यह DOM का उपयोग करने जैसा काम करता है , भले ही HTML खराब स्वरूप में हो। आप नियमित रूप से अभिव्यक्ति की तुलना में सरल रूप से सिंटैक्स के साथ HTML टैग और पाठ पा सकते हैं। एक बार जब आपको कोई तत्व मिल जाता है, तो आप उस पर और उसके बच्चों पर पुनरावृत्ति कर सकते हैं, जो कि सामग्री को समझने के लिए अधिक उपयोगी है, क्योंकि यह नियमित अभिव्यक्तियों के साथ है। मैं चाहता हूं कि सुंदर सूप का अस्तित्व वर्षों पहले था जब मुझे बहुत सारे स्क्रीनक्रैपिंग करने थे - इससे मुझे बहुत समय और सिरदर्द की बचत होती थी क्योंकि एचटीएमएल संरचना इतनी खराब थी कि इससे पहले कि लोग इसे सत्यापित करना शुरू कर दें।


5

हालाँकि इसे .NET वेब-टेस्टिंग के लिए डिज़ाइन किया गया था , लेकिन मैं इस उद्देश्य के लिए WatiN फ्रेमवर्क का उपयोग कर रहा हूं । चूंकि यह DOM-based है, इसलिए HTML, पाठ या चित्रों को कैप्चर करना बहुत आसान है। हाल ही में, मैंने इसका उपयोग मीडियाविकी ऑल पेज नेमस्पेस क्वेरी के लिंक की सूची को एक्सेल स्प्रेडशीट में डंप करने के लिए किया था । निम्नलिखित VB.NET कोड घर्षण बहुत कच्चा है, लेकिन यह काम करता है।


Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)

    Dim PagesLink As Link
    For Each PagesLink In PagesIE.TableBodies(2).Links
        With MyWorkSheet
            .Cells(XLRowCounterInt, 1) = PagesLink.Text
            .Cells(XLRowCounterInt, 2) = PagesLink.Url
        End With
        XLRowCounterInt = XLRowCounterInt + 1
    Next
End Sub


3

आप पर्ल का उपयोग न करने के लिए एक मूर्ख होंगे।

निम्नलिखित मॉड्यूल पर हड्डी और आसपास किसी भी परिमार्जन ginsu।

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper

3

मैंने LWP और HTML :: TreeBuilder का पर्ल के साथ उपयोग किया है और उन्हें बहुत उपयोगी पाया है।

LWP (libwww-perl के लिए छोटा) आपको वेबसाइटों से जुड़ने और HTML को परिमार्जन करने की सुविधा देता है, आप यहां मॉड्यूल प्राप्त कर सकते हैं और O'Reilly पुस्तक यहां ऑनलाइन लगती है

TreeBuilder आपको HTML से एक पेड़ बनाने की अनुमति देता है, और HTML में प्रलेखन और स्रोत उपलब्ध हैं :: TreeBuilder - Parser जो HTML सिंटैक्स ट्री बनाता है

हालांकि इस दृष्टिकोण की तरह कुछ करने के लिए अभी भी बहुत भारी उठाने हो सकता है। मैंने किसी अन्य उत्तर द्वारा सुझाए गए मैकेनाइज मॉड्यूल को नहीं देखा है , इसलिए मैं ऐसा कर सकता हूं।



3

ठीक है, यदि आप चाहते हैं कि यह क्लाइंट की ओर से केवल एक ब्राउज़र का उपयोग करके किया जाए जो आपके पास jcrawl.com है । वेब एप्लिकेशन ( http://www.jcrawl.com/app.html ) से अपनी स्क्रैपिंग सेवा को डिज़ाइन करने के बाद , आपको केवल अपने डेटा का उपयोग / प्रस्तुत करने के लिए HTML स्क्रिप्ट में जेनरेट की गई स्क्रिप्ट को जोड़ना होगा।

सभी स्क्रैपिंग तर्क ब्राउज़र पर जावास्क्रिप्ट के माध्यम से होता है। मुझे उम्मीद है कि आप इसे उपयोगी पाएँ। एक लाइव उदाहरण के लिए इस लिंक पर क्लिक करें जो याहू टेनिस की ताजा खबरें निकालता है ।


2

आपके पास शायद पहले से ही बहुत कुछ है, लेकिन मुझे लगता है कि यह वही है जो आप करने की कोशिश कर रहे हैं:

from __future__ import with_statement
import re, os

profile = ""

os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
    for line in f:
        profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")


2

मुझे Google स्प्रैडशीट का इंपोर्टएक्सएमएल (URL, XPath) फंक्शन पसंद है।

यदि आपकी XPath अभिव्यक्ति एक से अधिक मान लौटाती है, तो यह स्तंभ के नीचे की कोशिकाओं को दोहराएगा।

importxml()एक स्प्रेडशीट पर आपके 50 कार्य हो सकते हैं।

RapidMiner के वेब प्लगइन का उपयोग करना बहुत आसान है। यह पोस्ट कर सकता है, कुकीज़ स्वीकार कर सकता है, और उपयोगकर्ता-एजेंट सेट कर सकता है ।


2

मुझे पेज को पार्स करने के लिए अप्टाना के जैक्सर + jQuery का उपयोग करने में भी बड़ी सफलता मिली है। यह प्रकृति में उतना तेज़ या 'स्क्रिप्ट-जैसा' नहीं है, लेकिन jQuery के चयनकर्ता + वास्तविक जावास्क्रिप्ट / DOM अधिक जटिल (या विकृत) पृष्ठों पर एक जीवनरक्षक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.