سؤال

أنا جديدة إلى الثعبان ، أنا بحاجة إلى بعض المساعدة في بناء الجملة من أجل إيجاد بالتكرار عبر علامات html باستخدام lxml.هنا هي حالات الاستخدام أتعامل مع:

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

  1. كنت بحاجة إلى العثور على منتصف الجدول مع نتيجة البحث الصفوف (هذا واحد كنت قادرا على معرفة):

        self.mySearchTables = self.mySearchTree.findall(".//table")
        self.myResultRows = self.mySearchTables[1].findall(".//tr")
    
  2. كنت بحاجة إلى العثور على الروابط الواردة في هذا الجدول (هذا هو المكان الذي أنا يعلقوا):

        for searchRow in self.myResultRows:
            searchLink = patentRow.findall(".//a")
    

    لا يبدو أن في الواقع تحديد موقع العناصر صلة.

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

وأخيرا ، في الفعلية API مرجعا lxml, لم أكن قادرة على العثور على المعلومات على العثور على findall المكالمات.لقد جمعت هذه من أجزاء من التعليمات البرمجية وجدت على جوجل.أنا في عداد المفقودين شيئا عن كيفية العثور على أكثر من تكرار علامات HTML باستخدام lxml?

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

المحلول

أولا في ما يخص تحليل HTML:إذا كنت تتبع هذه التوصية من zweiterlinde و S. لوت على الأقل استخدام إصدار beautifulsoup المضمنة مع lxml.بهذه الطريقة أنت أيضا سوف تجني فائدة لطيفة xpath أو المغلق محدد واجهة.

ومع ذلك, أنا شخصيا أفضل إيان Bicking هو HTML محلل المدرجة في lxml.

ثانيا ، .find() و .findall() تأتي من lxml تحاول أن تكون متوافقة مع ElementTree من الطرق الموضحة في XPath الدعم في ElementTree.

هاتين الوظيفتين إلى حد ما سهلة الاستخدام لكنها محدودة جدا XPath.أوصي محاولة استخدام إما كاملة lxml xpath() طريقة أو إذا كنت بالفعل على دراية مع CSS باستخدام cssselect() طريقة.

وفيما يلي بعض الأمثلة مع HTML سلسلة تحليل مثل هذا:

from lxml.html import fromstring
mySearchTree = fromstring(your_input_string)

باستخدام css محدد فئة البرنامج تقريبا ننظر بشيء من هذا القبيل:

# Find all 'a' elements inside 'tr' table rows with css selector
for a in mySearchTree.cssselect('tr a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

أي ما يعادل باستخدام xpath طريقة ليكون:

# Find all 'a' elements inside 'tr' table rows with xpath
for a in mySearchTree.xpath('.//tr/*/a'):
    print 'found "%s" link to href "%s"' % (a.text, a.get('href'))

نصائح أخرى

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

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