На веб-странице есть код продукта, который мне нужно получить, и он находится в следующем разделе HTML:
<table...> <tr> <td> <font size="2">Product Code#</font> <br> <font size="1">2342343</font> </td> </tr> </table>
Так что я думаю, что лучший способ сделать это - сначала сослаться на элемент HTMLтекстовое значение «Код продукта №», а затем ссылка на второй тег шрифта в TD.
Идеи?
Моя стратегия:
<font>
Код:
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#')]
Предполагается, что soup является вашим BeautifulSoup экземпляром:
soup
BeautifulSoup
int(''.join(soup("font", size="1")[0](text=True)))
Или, если вам нужно получить несколько кодов продукта:
[int(''.join(font(text=True))) for font in soup("font", size="1")]
Не используйте регулярные выражения для разбора HTML. Для этой задачи я бы использовал следующий XPATH:
//TABLE/TR/TD/FONT[@size='1']
Или, если атрибут размера шрифта там не гарантирован и равен 1:
//FONT[text()='Product Code#']/parent::*/FONT[2]
Вы можете использовать это регулярное выражение (или что-то подобное):
<td>\n\ <font\ size="2">Product\ Code\#</font>\n\ <br>\n\ <font\ size="1">(?<ProductCode>.+?)</font>\n\ </td>
Вероятно, вы могли бы удалить некоторые из этих экранирований в зависимости от вашего движка RegExp ... Я был осторожен.