سؤال

وأنا أحاول أن تتخلص http://www.co.jefferson.co.us/ ATS / displaygeneral.do؟ شوب = 000104 والحصول على "اسم المالك (ق)" ما انا لي اعمال ولكن هو قبيح وليس الأفضل وأنا واثق، لذلك أنا أبحث عن طريقة أفضل. هنا هو ما قلته:

soup = BeautifulSoup(url_opener.open(url))            
x = soup('table', text = re.compile("Owner Name"))
print 'And the owner is', x[0].parent.parent.parent.tr.nextSibling.nextSibling.next.next.next

ووHTML ذات الصلة هو

<td valign="top">
    <table border="1" cellpadding="1" cellspacing="0" align="right">
    <tbody><tr class="tableheaders">
    <td>Owner Name(s)</td>
    </tr>

    <tr>

    <td>PILCHER DONALD L                         </td>
    </tr>

    </tbody></table>
</td>

ونجاح باهر، وهناك الكثير من الأسئلة حول beautifulsoup، نظرت من خلالها لكنها لم تجد جوابا التي ساعدتني، ونأمل أن هذه ليست مسألة مكررة

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

المحلول

( تعديل : في. على ما يبدو HTML وOP نشر الأكاذيب - هناك في الواقع أي علامة tbody الذي تبحث عنه، على الرغم من أنه جعل من نقطة بما في ذلك HTML لذلك، وتغيير ل استخدام table بدلا من tbody).

وكما قد يكون هناك العديد من الصفوف الجدول الذي تريد (على سبيل المثال، راجع URL الأخوة إلى واحد كنت تعطي، مع آخر رقم، 4، تحولت إلى 5)، وأقترح حلقة من قبيل ما يلي:

# locate the table containing a cell with the given text
owner = re.compile('Owner Name')
cell = soup.find(text=owner).parent
while cell.name != 'table': cell = cell.parent
# print all non-empty strings in the table (except for the given text)
for x in cell.findAll(text=lambda x: x.strip() and not owner.match(x)):
  print x

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

نصائح أخرى

وهذا هو الجواب هارون DeVore من فريق المناقشة Beautifulsoup، وتعمل بشكل جيد بالنسبة لي.

soup = BeautifulSoup(...)
label = soup.find(text="Owner Name(s)")

والاحتياجات Tag.string للوصول الى سلسلة اسم الفعلية

name = label.findNext('td').string

إذا كنت تفعل حفنة منهم، يمكنك الذهاب حتى للحصول على قائمة الفهم.

names = [unicode(label.findNext('td').string) for label in
soup.findAll(text="Owner Name(s)")]

وهذا هو تحسن طفيف، ولكن لم أتمكن من معرفة كيفية التخلص من الآباء والأمهات الثلاث.

x[0].parent.parent.parent.findAll('td')[1].string
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top