سؤال

أنا أفكر في المحاولة حساء جميل, ، حزمة بايثون لكشط HTML.هل هناك أي حزم تجريف HTML أخرى يجب أن أنظر إليها؟لغة بايثون ليست شرطًا، فأنا مهتم حقًا بالتعرف على لغات أخرى أيضًا.

القصة حتى الآن:

هل كانت مفيدة؟

المحلول

إن ما يعادل عالم روبي للحساء الجميل هو لماذا_the_lucky_stiff's هبريكوت.

نصائح أخرى

في عالم .NET، أوصي بحزمة HTML Agility Pack.ليس بهذه البساطة مثل بعض الخيارات المذكورة أعلاه (مثل HTMLSQL)، ولكنه مرن للغاية.فهو يتيح لك معالجة HTML سيئة التكوين كما لو كانت XML جيدة التكوين، بحيث يمكنك استخدام XPATH أو مجرد التكرار عبر العقد.

http://www.codeplex.com/htmlagilitypack

تعد BeautifulSoup طريقة رائعة لمسح HTML.لقد جعلتني وظيفتي السابقة أقوم بالكثير من عمليات الاستخلاص وأتمنى لو كنت أعرف عن BeautifulSoup عندما بدأت.إنه يشبه DOM مع الكثير من الخيارات المفيدة وهو أكثر لغة بايثونية.إذا كنت ترغب في تجربة روبي، فقد قاموا بنقل برنامج BeautifulSoup وأطلقوا عليه اسم RubyfulSoup ولكن لم يتم تحديثه منذ فترة.

الأدوات المفيدة الأخرى هي HTMLParser أو sgmllib.SGMLParser والتي تعد جزءًا من مكتبة Python القياسية.تعمل هذه عن طريق استدعاء الأساليب في كل مرة تقوم فيها بإدخال/الخروج من علامة وتواجه نص HTML.إنهم مثل المغتربين إذا كنت معتادًا على ذلك.تعتبر هذه المكتبات مفيدة بشكل خاص إذا كنت ستقوم بتحليل ملفات كبيرة جدًا وكان إنشاء شجرة DOM أمرًا طويلًا ومكلفًا.

التعبيرات العادية ليست ضرورية للغاية.يتعامل BeautifulSoup مع التعبيرات العادية، لذا إذا كنت بحاجة إلى قوتها، يمكنك الاستفادة منها هناك.أنا أقول استخدم BeautifulSoup إلا إذا كنت بحاجة إلى السرعة ومساحة أصغر للذاكرة.إذا وجدت محلل HTML أفضل في بايثون، فأخبرني بذلك.

وجدت HTMLSQL لتكون طريقة بسيطة يبعث على السخرية لكشط الشاشة.يستغرق الأمر دقائق حرفيًا للحصول على نتائج معه.

الاستعلامات بديهية للغاية - مثل:

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

هناك الآن بعض البدائل الأخرى التي تتبع نفس النهج.

بايثون com.lxml تعمل المكتبة بمثابة رابط بايثوني لمكتبات libxml2 وlibxslt.يعجبني بشكل خاص دعم XPath والطباعة الجميلة لبنية XML الموجودة في الذاكرة.كما أنه يدعم تحليل HTML المكسور.ولا أعتقد أنه يمكنك العثور على مكتبات/ارتباطات Python الأخرى التي تحلل XML بشكل أسرع من lxml.

بالنسبة لبيرل، هناك WWW::Mechanize.

لدى Python العديد من الخيارات لتجريد HTML بالإضافة إلى Beatiful Soup.وهنا بعض الآخرين:

  • ميكنة:على غرار بيرل WWW:Mechanize.يمنحك متصفحًا مثل الكائن ليتفاعل مع صفحات الويب
  • com.lxml:بايثون ملزمة ل libwww.يدعم خيارات متنوعة لاجتياز العناصر وتحديدها (على سبيل المثال. XPath واختيار CSS)
  • سكرابمارك:مكتبة عالية المستوى تستخدم القوالب لاستخراج المعلومات من HTML.
  • pyquery:يسمح لك بإجراء jQuery مثل الاستعلامات على مستندات XML.
  • سكري:إطار عمل عالي المستوى للتقطيع والزحف على الويب.يمكن استخدامه لكتابة العناكب واستخراج البيانات والمراقبة والاختبار الآلي

يعد "Simple HTML DOM Parser" خيارًا جيدًا لـ PHP، إذا كنت على دراية بمحددات jQuery أو JavaScript، فستجد نفسك في المنزل.

العثور عليه هنا

هناك أيضًا مشاركة مدونة حول هذا الموضوع هنا.

لماذا لم يذكر أحد JSOUP لجافا حتى الآن؟ http://jsoup.org/

ال معرف القالب فائدة من أدريان هولوفاتي (من جانغو الشهرة) يستخدم أسلوبًا مثيرًا للاهتمام للغاية:تقوم بإطعامها بأشكال مختلفة من نفس الصفحة و"تتعلم" مكان وجود "الثغرات" للبيانات المتغيرة.إنه ليس خاصًا بـ HTML، لذا سيكون من الجيد حذف أي محتوى نص عادي آخر أيضًا.لقد استخدمته أيضًا لملفات PDF وHTML المحولة إلى نص عادي (مع pdftotext وlynx، على التوالي).

سأكتشف أولاً ما إذا كان الموقع (المواقع) المعني يوفر خادم API أو موجز ويب لـ RSS للوصول إلى البيانات التي تحتاجها.

أنا أعرف وأحب مكشطة الشاشة.

Screen-Scraper هي أداة لاستخراج البيانات من مواقع الويب.تقوم مكشطة الشاشة بأتمتة:

* 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.

سيكون هناك خيار آخر لبيرل الويب::مكشطة والذي يعتمد على روبي سكرابي.باختصار، باستخدام بناء جملة لطيف وموجز، يمكنك الحصول على مكشطة قوية مباشرة في هياكل البيانات.

يعتبر عملية Scraping Stack Overflow أمرًا سهلاً بشكل خاص أحذية و هبريكوت.

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

لقد حققت بعض النجاح مع htmlUnit, ، في جافا.إنه إطار عمل بسيط لكتابة اختبارات الوحدات على واجهات مستخدم الويب، ولكنه مفيد أيضًا في استخراج HTML.

أداة أخرى ل.NET هي MhtBuilder

يوجد هذا الحل أيضا: netty HttpClient

أستخدم Hpricot على روبي.على سبيل المثال، هذا مقتطف من التعليمات البرمجية التي أستخدمها لاسترداد جميع عناوين الكتب من الصفحات الست في حساب 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 

إنها كاملة إلى حد كبير.كل ما يأتي قبل ذلك هو استيراد المكتبة وإعدادات الوكيل الخاص بي.

لقد استخدمت Beautiful Soup كثيرًا مع بايثون.إنه أفضل بكثير من التحقق من التعبير العادي، لأنه يعمل مثل استخدام DOM, ، حتى لو كان تنسيق HTML سيئًا.يمكنك العثور بسرعة على علامات HTML والنصوص باستخدام بناء جملة أبسط من التعبيرات العادية.بمجرد العثور على عنصر، يمكنك التكرار عليه وعلى أبنائه، وهو أمر أكثر فائدة لفهم محتويات التعليمات البرمجية مقارنة بالتعبيرات العادية.أتمنى أن يكون برنامج Beautiful Soup موجودًا منذ سنوات مضت عندما كان علي القيام بالكثير من عمليات نسخ الشاشة - كان سيوفر لي الكثير من الوقت والصداع نظرًا لأن بنية HTML كانت سيئة للغاية قبل أن يبدأ الناس في التحقق من صحتها.

على الرغم من أنه تم تصميمه من أجل .شبكة اختبار الويب، كنت أستخدم واتين إطار لهذا الغرض.نظرًا لأنه يعتمد على DOM، فمن السهل جدًا التقاط HTML أو النص أو الصور.لقد استخدمته مؤخرًا لتفريغ قائمة الروابط من ملف ميدياويكي استعلام مساحة اسم كافة الصفحات في جدول بيانات Excel.الأتى 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

تنفيذات ال خوارزمية تحليل HTML5: html5lib (بايثون، روبي)، Validator.nu محلل HTML (جافا، جافا سكريبت؛C++ قيد التطوير) هرج ومرج (ج)، توينتسام (ج #؛القادمة).

ستكون أحمقًا إذا لم تستخدم بيرل..هنا تأتي النيران..

قم بتجميع الوحدات التالية وقم بكشط أي جينسو حولها.

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

لقد استخدمت LWP و HTML::TreeBuilder مع Perl ووجدتها مفيدة جدًا.

يتيح لك LWP (اختصار لـ libwww-perl) الاتصال بمواقع الويب واستخراج HTML، يمكنك الحصول على الوحدة هنا وكتاب أورايلي يبدو أن تكون على الانترنت هنا.

يسمح لك TreeBuilder بإنشاء شجرة من HTML، و الوثائق والمصدر متوفرة في HTML::TreeBuilder - محلل يقوم ببناء شجرة بناء جملة HTML.

قد يكون هناك الكثير من العمل الثقيل الذي لا يزال يتعين القيام به مع شيء مثل هذا النهج.لم أطلع على وحدة الميكنة اقترحته إجابة أخرى، لذلك قد أفعل ذلك.

في جافا، يمكنك استخدام TagSoup.

حسنًا، إذا كنت تريد أن يتم ذلك من جانب العميل باستخدام المتصفح الموجود لديك فقط jcrawl.com.بعد تصميم خدمة التخريد الخاصة بك من تطبيق الويب (http://www.jcrawl.com/app.html)، ما عليك سوى إضافة البرنامج النصي الذي تم إنشاؤه إلى صفحة HTML لبدء استخدام/عرض بياناتك.

يحدث كل منطق التجريد على المتصفح عبر JavaScript.أتمنى أن تجدها مفيدة.انقر فوق هذا الرابط للحصول على مثال حي يستخرج ملف آخر الأخبار من ياهو للتنس.

ربما لديك الكثير بالفعل، ولكن أعتقد أن هذا هو ما تحاول القيام به:

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")

لقد حصلت على نتائج مختلطة في .NET باستخدام SgmlReader الذي بدأ في الأصل بواسطة كريس لوفيت ويبدو أنه تم تحديثه بواسطة مايند تاتش.

تعجبني وظيفة ImportXML(URL, XPath) في جداول بيانات Google.

سيتم تكرار الخلايا أسفل العمود إذا قام تعبير XPath بإرجاع أكثر من قيمة واحدة.

يمكنك الحصول على ما يصل إلى 50 importxml() وظائف في جدول بيانات واحد.

يعد البرنامج الإضافي للويب الخاص بـ RapidMiner سهل الاستخدام أيضًا.يمكنه القيام بالمشاركات، وقبول ملفات تعريف الارتباط، ويمكنه تعيين وكيل المستخدم.

لقد حققت أيضًا نجاحًا كبيرًا باستخدام Aptana's Jaxer + jQuery لتحليل الصفحات.إنه ليس سريعًا أو "يشبه البرنامج النصي" بطبيعته، ولكن محددات jQuery + JavaScript/DOM الحقيقية هي منقذ للحياة في الصفحات الأكثر تعقيدًا (أو المشوهة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top