Помогите получить код продукта из HTML с помощью Beautiful Soup - PullRequest
0 голосов
/ 15 августа 2010

На веб-странице есть код продукта, который мне нужно получить, и он находится в следующем разделе HTML:

<table...>
<tr>
 <td>
 <font size="2">Product Code#</font>
 <br>
 <font size="1">2342343</font>
 </td>

</tr>
</table>

Так что я думаю, что лучший способ сделать это - сначала сослаться на элемент HTMLтекстовое значение «Код продукта №», а затем ссылка на второй тег шрифта в TD.

Идеи?

Ответы [ 4 ]

1 голос
/ 15 августа 2010

Моя стратегия:

  • Найти текстовые узлы, соответствующие строке "Код продукта #"
  • Для каждого такого узла, получить родительский элемент <font> и найти следующий родительский элементsibling <font> element
  • Вставьте содержимое элемента sibling в список

Код:

from BeautifulSoup import BeautifulSoup


html = open("products.html").read()
soup = BeautifulSoup(html)

product_codes = [tag.parent.findNextSiblings('font')[0].contents[0]
                 for tag in 
                 soup.findAll(text='Product Code#')]
1 голос
/ 15 августа 2010

Предполагается, что soup является вашим BeautifulSoup экземпляром:

int(''.join(soup("font", size="1")[0](text=True)))

Или, если вам нужно получить несколько кодов продукта:

[int(''.join(font(text=True))) for font in soup("font", size="1")]
0 голосов
/ 15 августа 2010

Не используйте регулярные выражения для разбора HTML. Для этой задачи я бы использовал следующий XPATH:

//TABLE/TR/TD/FONT[@size='1']

Или, если атрибут размера шрифта там не гарантирован и равен 1:

//FONT[text()='Product Code#']/parent::*/FONT[2]
0 голосов
/ 15 августа 2010

Вы можете использовать это регулярное выражение (или что-то подобное):

<td>\n\ <font\ size="2">Product\ Code\#</font>\n\ <br>\n\ <font\ size="1">(?<ProductCode>.+?)</font>\n\ </td>

Вероятно, вы могли бы удалить некоторые из этих экранирований в зависимости от вашего движка RegExp ... Я был осторожен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...