سؤال

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

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

المحلول

إذا كنت تستخدم لغة بايثون، قم بإلقاء نظرة فاحصة على Beautiful Soup (http://crummy.com/software/BeautifulSoup).

مكتبة قادرة للغاية، تجعل عملية الكشط أمرًا سهلاً.

نصائح أخرى

تعتبر حزمة HTML Agility Pack لمبرمجي .net رائعة.يقوم بتحويل صفحات الويب في مستندات XML التي يمكن الاستعلام عنها باستخدام XPath.

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");

يمكنك العثور عليها هنا. http://www.codeplex.com/htmlagilitypack

أعتقد أن الإجابة العامة هنا هي استخدام أي لغة + مكتبة http + محلل html/xpath.أجد أن استخدام Ruby + hpricot يعطي حلاً نظيفًا ولطيفًا:

require 'rubygems'
require 'hpricot'
require 'open-uri'

sites = %w(http://www.google.com http://www.stackoverflow.com)

sites.each do |site|
  doc = Hpricot(open(site))

  # iterate over each div in the document (or use xpath to grab whatever you want)
  (doc/"div").each do |div|
    # do something with divs here
  end
end

لمعرفة المزيد عن Hpricot انظر http://code.whytheluckystiff.net/hpricot/

أنا شخصيا أحب WWW::مكننة وحدة بيرل لهذه الأنواع من المهام.يمنحك كائنًا تم تصميمه على غرار متصفح الويب النموذجي (على سبيل المثال.يمكنك اتباع الروابط أو ملء النماذج أو استخدام "زر الرجوع" عن طريق استدعاء الأساليب الموجودة عليه).

لاستخراج المحتوى الفعلي، يمكنك بعد ذلك ربطه HTML::TreeBuilder لتحويل موقع الويب الذي تزوره حاليًا إلى شجرة HTML::العنصر الكائنات، واستخرج البيانات التي تريدها (ملف look_down() طريقة HTML::Element مفيد بشكل خاص).

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

في الأساس، تحتاج إلى تحليل HTML، ولكن الأهم من ذلك هو أتمتة المتصفح.هذا إلى حد القدرة على تحريك الماوس والنقر، وهو تقليد حقيقي للمستخدم.تحتاج إلى استخدام برنامج Screencapture للوصول إلى رموز التحقق وإرسالها إلى decaptcha.com (الذي يحلها مقابل جزء صغير من السنت) للتحايل على ذلك.انسَ حفظ ملف captcha هذا عن طريق تحليل ملف html دون عرضه في المتصفح "كما يُفترض أن يُرى".أنت تقوم بتقطيع الشاشة، وليس httprequestscraping.

لقد قام watir بالخدعة بالنسبة لي بالاشتراك مع autoitx (لتحريك الماوس وإدخال المفاتيح في الحقول -> في بعض الأحيان يكون هذا ضروريًا لتعيين أحداث جافا سكريبت الصحيحة) وأداة مساعدة بسيطة لالتقاط الشاشة لرموز التحقق.بهذه الطريقة ستكون ناجحًا للغاية، فمن غير المجدي تمامًا أن تكتب محللًا رائعًا لـ html لتكتشف أن مالك الموقع قد قام بتحويل جزء من النص إلى رسومات.(إشكالية؟لا، ما عليك سوى الحصول على مكتبة التعرف الضوئي على الحروف وتغذية ملف jpeg، وسيتم إرجاع النص).إلى جانب ذلك، نادرًا ما رأيتهم يذهبون إلى هذا الحد، على الرغم من وجود الكثير من النصوص في الرسومات في المواقع الصينية.

لقد أنقذ Xpath يومي طوال الوقت، فهو عبارة عن لغة خاصة بالمجال رائعة (قد أكون مخطئًا، IMHO) ويمكنك الوصول إلى أي علامة في الصفحة، على الرغم من أنك تحتاج في بعض الأحيان إلى تعديلها.

ما فاتني هو "القوالب العكسية" (يحتوي إطار عمل الروبوت الخاص بالسيلينيوم على هذا).كان لدى Perl هذا في وحدة CPAN Template::Extract، وهو مفيد جدًا.

سأترك تحليل HTML، أو إنشاء DOM، للمتصفح، نعم، لن يكون الأمر بهذه السرعة، لكنه سيعمل طوال الوقت.

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

واتر إذا كنت من محبي روبي، وأود أن أقول السيلينيوم بالنسبة للبقية.تم تصميم "المحاكي البشري" (أو محاكي الويب في روسيا) بالفعل لهذا النوع من التجريد، ولكنه مرة أخرى منتج روسي من شركة لا تخفي نواياها.

أعتقد أيضًا أن وايلي سيصدر في أحد هذه الأسابيع كتابًا جديدًا عن الكشط، والذي من المفترض أن يكون مثيرًا للاهتمام.حظ سعيد...

أنا شخصيا أجد http://github.com/shuber/curl/tree/master و http://simplehtmldom.sourceforge.net/ رائع للاستخدام في مشاريع العنكبوت/التجريف الخاصة بي PHP.

بيرل WWW::مكننة تعد المكتبة ممتازة للقيام بالتفاعل مع موقع الويب للوصول إلى الصفحة الفعلية التي تحتاجها.

سأستخدم LWP (Libwww لـ Perl).إليك دليل صغير جيد: http://www.perl.com/pub/a/2002/08/20/perlandlwp.html

WWW::Scraper لديه مستندات هنا: http://cpan.uwinnipeg.ca/htdocs/Scraper/WWW/Scraper.htmlيمكن أن يكون مفيدًا كقاعدة، وربما ترغب في إنشاء وحدة خاصة بك تناسب احتياجات التعدين في مطعمك.

سوف يمنحك LWP زاحفًا أساسيًا يمكنك البناء عليه.

كان هناك عدد من الإجابات التي توصي بـ Perl Mechanize، لكنني أعتقد أن Ruby Mechanize (المشابه جدًا لإصدار Perl) أفضل.إنه يتعامل مع بعض الأشياء مثل النماذج بطريقة أكثر نظافة من الناحية النحوية.أيضًا، هناك عدد قليل من الواجهات الأمامية التي يتم تشغيلها على القمة من Ruby Mechanize مما يجعل الأمور أسهل.

ما هي اللغة التي تريد استخدامها؟

قد يكون التجعيد مع awk هو كل ما تحتاجه.

يمكنك استخدام مرتب لتحويله إلى XHTML، ثم استخدم أيًا من مرافق معالجة XML المتوفرة باللغة التي تختارها.

أنا أوصي حساء جميل.إنها ليست الأسرع ولكنها تؤدي أداءً جيدًا حقًا فيما يتعلق بالتنسيق غير الجيد لصفحات (X)HTML التي يختنقها معظم المحللين اللغويين.

ما قاله شخص ما.

استخدم أي لغة.

طالما أن لديك مكتبة محلل جيدة ومكتبة http، فأنت جاهز.

الأشياء الشجرية أبطأ، ثم استخدم مكتبة تحليل جيدة فقط.

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