Таблица парсинга HTML - BeautifulSoup - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь разобрать вторую таблицу, показанную ниже, используя BeautifulSoup. У меня проблемы с идентификацией второй таблицы стихов первой, потому что атрибуты таблиц абсолютно одинаковы. Как мне получить доступ к информации в таблице, такой как name = PATHWAY? До сих пор я пытался получить доступ к таблице:

table = soup.find('table', {'name':'PATHWAY'})

Я получил ответ "Нет", хотя знаю, что таблица присутствует. Для меня это означает, что мой метод разграничения между ними не работает. Есть предложения?

<table border="0" cellspacing="0" cellpadding="0" bgcolor="#DCDCDC">
<tr><td>

  <table border="0" cellspacing="1" cellpadding="3">
<tr>
<td class=ue><a name="REACTION TYPE">REACTION TYPE</td><td class=ue>ORGANISM</td><td  class=ue>COMMENTARY</td><td class=ue>LITERATURE</td></tr>
<tr class=tr1>
<td class=g>condensation</td><td class=no>-</td><td class=no>-</td><td class=no>-</td></tr>
  </table>
</td></tr></table>
<br>

<table border="0" cellspacing="0" cellpadding="0" bgcolor="#DCDCDC">
<tr><td>


  <table border="0" cellspacing="1" cellpadding="3">
<tr>
<td class=ue><a name="PATHWAY">PATHWAY</td><td class=ue>KEGG Link</td><td class=ue>MetaCyc Link</td><td class=ue></td></tr>
  <table>

Ответы [ 4 ]

1 голос
/ 29 июня 2011

Mu Mind имеет право: найти «a», затем переместиться обратно к родителю.

soup.find(attrs={"name":"PATHWAY"}).findParent('table')

Это путь Python .... Существует одна команда xpath, но она работает с xpath на осиболее сложный и заслуживающий только усилий, он имеет определенное применение (например, требования xslt или javascript)

0 голосов
/ 28 июня 2011

Вы можете использовать форму функции find:

soup.find(lambda tag: (tag.name=='table' and \
    (tag.find('a', attrs={'name': 'PATHWAY'}) is not None)))
0 голосов
/ 28 июня 2011
>>> soup.find(attrs={"name":"PATHWAY"})
<a name="PATHWAY">PATHWAY</a>
0 голосов
/ 28 июня 2011

Первый:

table = soup.find('table' {'name':'PATHWAY'}

не является правильным кодом Python.

Что должно совпадать?

Это будет соответствовать только.

Либо вы перебираете каждую отдельную таблицу и выполняете связанную проверку внутри каждой таблицы, либо вы перебираете каждый отдельный узел дерева, пока не найдете связанный узел, а затем идете вверх по иерархии узлов (следуя родительским узлам), пока не найдете элемент таблицы. RecursiveChildGenerator () можно использовать для итерации по всем узлам (как в плоском списке).

...