ما هي أفضل المكتبات التي تم إنشاؤها مسبقًا للقيام بالزحف على الويب في بيثون [مكررة

StackOverflow https://stackoverflow.com/questions/421283

  •  05-07-2019
  •  | 
  •  

سؤال

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

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


تكرار دقيق: هل يعرف أي شخص زاحف ويب جيد على شبكة الإنترنت التي يمكنني استخدامها؟

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

المحلول

يستخدم Scrapy.

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

  • دعم مدمج لحلية HTML و XML و CSV و JavaScript
  • خط أنابيب الوسائط لتجنب العناصر مع الصور (أو أي وسائط أخرى) وتنزيل ملفات الصور أيضًا
  • دعم لتوسيع Scrapy عن طريق توصيل وظائفك الخاصة باستخدام الأدوات الوسطى والملحقات وخطوط الأنابيب
  • مجموعة واسعة من الأدوات الوسطى المدمجة والملحقات للتعامل مع الضغط ، ذاكرة التخزين المؤقت ، ملفات تعريف الارتباط ، المصادقة ، وكيل المستخدم ، معالجة Robots.txt ، إحصائيات ، تقييد عمق الزحف ، إلخ
  • وحدة تحكم قذيفة التفاعلية التفاعلية ، مفيدة للغاية لتطوير وتصحيح الأخطاء
  • وحدة التحكم في إدارة الويب لمراقبة الروبوت والتحكم فيه
  • وحدة التحكم Telnet للوصول منخفض المستوى إلى عملية SCRAPY

مثال رمز لاستخراج المعلومات حول جميع ملفات التورنت التي تمت إضافتها اليوم في مينينوفا موقع التورنت ، باستخدام محدد XPath على HTML تم إرجاعه:

class Torrent(ScrapedItem):
    pass

class MininovaSpider(CrawlSpider):
    domain_name = 'mininova.org'
    start_urls = ['http://www.mininova.org/today']
    rules = [Rule(RegexLinkExtractor(allow=['/tor/\d+']), 'parse_torrent')]

    def parse_torrent(self, response):
        x = HtmlXPathSelector(response)
        torrent = Torrent()

        torrent.url = response.url
        torrent.name = x.x("//h1/text()").extract()
        torrent.description = x.x("//div[@id='description']").extract()
        torrent.size = x.x("//div[@id='info-left']/p[2]/text()[2]").extract()
        return [torrent]

نصائح أخرى

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

ومع ذلك ، يمكنك تجربة الحصاد http://www.harvestmanontheweb.com/

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