سؤال

أحاول حاليًا كشط موقع ويب يحتوي على HTML غير المنسق إلى حد ما (غالبًا ما يفقد علامات الإغلاق ، ولا يستخدم الفئات أو المعرفات ، لذا من الصعب للغاية الذهاب مباشرة إلى العنصر الذي تريده ، وما إلى ذلك). لقد كنت أستخدم BeautifulSoup مع بعض النجاح حتى الآن ، لكن بين الحين والآخر (على الرغم من أنه نادرًا ما) ، أواجه صفحة حيث تقوم BeautifulSoup بإنشاء شجرة HTML بشكل مختلف قليلاً عن (على سبيل المثال) Firefox أو WebKit. على الرغم من أن هذا أمر مفهوم لأن تنسيق HTML يترك هذا غامضًا ، إذا تمكنت من الحصول على نفس شجرة التحليل التي تنتجها Firefox أو WebKit ، فسأكون قادرًا على تحليل الأمور بسهولة أكبر. عادة ما تكون المشكلات شيئًا ما مثل الموقع يفتح أ <b> علامة مرتين وعندما ترى Second Second <b> العلامة ، تغلق على الفور الأول بينما Firefox و Webkit Nest <b> العلامات.

هل هناك مكتبة تجريف على شبكة الإنترنت لـ Python (أو حتى أي لغة أخرى (أحصل على يائسة)) يمكنها إعادة إنتاج شجرة التحليل الناتجة عن Firefox أو WebKit (أو على الأقل الاقتراب من BeautifulSoup في حالات الغموض).

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

المحلول

يستخدم BeautifulSoup كبناء شجرة ل html5lib:

from html5lib import HTMLParser, treebuilders

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))

text = "a<b>b<b>c"
soup = parser.parse(text)
print soup.prettify()

انتاج:

<html>
 <head>
 </head>
 <body>
  a
  <b>
   b
   <b>
    c
   </b>
  </b>
 </body>
</html>

نصائح أخرى

pywebkitgtk يبدو أنه قد يكون بعض المساعدة.

أيضًا هنا رجل كان يجب أن يفعل الشيء نفسه ولكن الحصول على تصدير المحتوى بعد أن ركض JavaScript ، قم بتنفيذ JavaScript من Python باستخدام Pywebkitgtk.

pywebkitgtk في سوق الاجبان.

يمكنك أيضا افعل هذا مع pyqt.

هل جربت Scrapy?

Scrapy عبارة عن إطار عمل سريع للتجشير على الشاشة وإطار زحف الويب ، ويستخدم لزحف المواقع الإلكترونية واستخراج البيانات المنظمة من صفحاتها. يمكن استخدامه لمجموعة واسعة من الأغراض ، من استخراج البيانات إلى المراقبة والاختبار الآلي.

يمكنك قيادة متصفح من اختيارك السيلينيوم.

قد ترغب في إلقاء نظرة على وحدة ميكانيكي:

http://wwwsearch.sourceforge.net/mechanize/

حسنًا ، WebKit مفتوح المصدر حتى تتمكن من استخدام المحلل الخاص به (في مكون WebCore) ، إذا كانت أي لغة مقبولة

كتب إيان بيكينغ ذات مرة أن LXML بشكل مدهش يمكن أن يكون أفضل في تحليل الحساء من الحساء الجميل: http://blog.ianbicking.org/2008/12/10/lxml-an-underapprecied-web-scraping-library/ (مجرد ذكر للرجوع إليه ، لم تجرب ذلك شخصيًا)

يمكنك استخدام محلل LXML ، في The BeautifulSoup ، وتستخدم XPath للعثور على البيانات في صفحة HTML غير المطالبة ، يمكنك نسخ XPath عند فحص العنصر باستخدام Firebug.

يمكنك التحقق من هذا البرنامج التعليمي:http://www.youtube.com/watch؟v=pgwff-ut0zm

من الوثائق يبدو ذلك icantbelieveitsbeautifulsoup المحلل هو ما تريد:

Icantbelieveitsbeautifulsoup هي أيضا فئة فرعية من beautifulsoup. يحتوي على استدلال HTML الذي يتوافق بشكل أوثق مع معيار HTML ، ولكن يتجاهل كيفية استخدام HTML في العالم الحقيقي. على سبيل المثال ، يكون HTML صالحًا u003CB>لعلامات العش ، ولكن في العالم الحقيقي ، u003CB>تعني العلامة المتداخلة دائمًا أن المؤلف نسي إغلاق u003CB>العلامة الأولى. إذا واجهت شخصًا u003CB>يعشش العلامات فعليًا ، فيمكنك استخدام icantbelieveitsbeautifulsoup.u003C/b>u003C/b>u003C/b>u003C/b>

هذا يبدو جيدًا بالنسبة لي أنا أستخدمه بنفسي: حلقة الوصل

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