Найти - Пользователи
Полная версия: Проблемы с BeautifulSoup, не могу отпарсить данные.
Начало » Web » Проблемы с BeautifulSoup, не могу отпарсить данные.
1
kapitonz
#python
# -*- coding: windows-1251 -*-
from BeautifulSoup import BeautifulSoup
html='''
"><table cellpadding="7" cellspacing="0" width="100%"><tbody><tr bgcolor="#cdcdcd">
<td width="50%" align="center"><b>Наименование товара</b></td>
<td width="10%" align="center"><b>Артикул</b></td>
<td width="10%" align="center"><b>Ед изм</b></td>
<td width="10%" align="center"><b>Кол-во</b></td>
<td width="10%" align="center"><b>Цена (руб)</b></td>
<td width="10%" align="center"><b>Сумма (руб)</b></td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1162044s1/" target="_blank">БАНКА ПЛАСТИК ЦЕНТР ДЛЯ СЫПУЧИХ ПРОДУКТОВ &quot;GALAXY&quot; 1,6Л</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1162044s1/" target="_blank">1162044</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">82.6</td>
<td align="right">82.6</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1306944s1/" target="_blank">ГОЛЕНЬ ИНДОЛИНА ИНДЕЙКИ БЕСКОСТНАЯ ОХЛАЖДЕННАЯ В ГЗС 700Г ШТ</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1306944s1/" target="_blank">1306944</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">157.1</td>
<td align="right">157.1</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1228646s1/" target="_blank">ФИЛЕ ИНДОЛИНА ГРУДКИ ИНДЕЙКИ ОХЛАЖДЕННОЕ В ГЗС 700Г ШТ</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1228646s1/" target="_blank">1228646</a></td>
<td align="center">шт</td>
<td align="right">2</td>
<td align="right">199</td>
<td align="right">398</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1048769s1/" target="_blank">ЧАЙ КРАСНЫЙ &quot;ЧЕРНЫЙ ДРАКОН&quot; ЮНЬНАНЬСКИЙ 100Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1048769s1/" target="_blank">1048769</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">62.3</td>
<td align="right">62.3</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1037739s1/" target="_blank">ЧАЙ ЧЕРНЫЙ RISTON EARL GREY (ЭРЛ ГРЕЙ) 100Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1037739s1/" target="_blank">1037739</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">59.4</td>
<td align="right">59.4</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1033631s1/" target="_blank">МАСЛО ОСТАНКИНСКОЕ СЛИВОЧНОЕ КРЕСТЬЯНСКОЕ 72,5% 180Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1033631s1/" target="_blank">1033631</a></td>
<td align="center">шт</td>
<td align="right">2</td>
<td align="right">71.1</td>
<td align="right">142.2</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1186250s1/" target="_blank">ВОДА VITA АРХЫЗИК ДЕТСКАЯ НЕГАЗИРОВАННАЯ, С РОЖДЕНИЯ, 5Л</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1186250s1/" target="_blank">1186250</a></td>
<td align="center">шт</td>
<td align="right">2</td>
<td align="right">73.9</td>
<td align="right">147.8</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1075705s1/" target="_blank">МОЛОКО ПРОСТОКВАШИНО ОТБОРНОЕ ПАСТЕРИЗОВАННОЕ 3,4-4,5% 0,93Л</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1075705s1/" target="_blank">1075705</a></td>
<td align="center">пэт</td>
<td align="right">1</td>
<td align="right">40.2</td>
<td align="right">40.2</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1325926s1/" target="_blank">ТУАЛЕТНАЯ БУМАГА LUXE С ТИСНЕНИЕМ И ПЕРФОРАЦИЕЙ 55М</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1325926s1/" target="_blank">1325926</a></td>
<td align="center">шт</td>
<td align="right">2</td>
<td align="right">3.5</td>
<td align="right">7</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1008729s1/" target="_blank">ТУАЛЕТНАЯ БУМАГА ZEWA ПЛЮС ЗЕЛЕНАЯ 2 СЛОЯ 4 РУЛОНА</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1008729s1/" target="_blank">1008729</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">36.9</td>
<td align="right">36.9</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1001936s1/" target="_blank">ВОДА ШИШКИН ЛЕС НЕГАЗИРОВАННАЯ ЧИСТАЯ ПИТЬЕВАЯ 5Л</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1001936s1/" target="_blank">1001936</a></td>
<td align="center">пэт</td>
<td align="right">1</td>
<td align="right">45.9</td>
<td align="right">45.9</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1260208s1/" target="_blank">ПРИПРАВА ДЛЯ САЛАТА KOTANYI ГРЕЧЕСКАЯ, 13Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1260208s1/" target="_blank">1260208</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">17.9</td>
<td align="right">17.9</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1260212s1/" target="_blank">ПРИПРАВА ДЛЯ САЛАТА KOTANYI С ТРАВАМИ, 13Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1260212s1/" target="_blank">1260212</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">17.9</td>
<td align="right">17.9</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1018570s1/" target="_blank">МЕШКИ ДЛЯ МУСОРА AZUR 60 ЛИТРОВ 20ШТУК</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1018570s1/" target="_blank">1018570</a></td>
<td align="center">рул</td>
<td align="right">1</td>
<td align="right">32.4</td>
<td align="right">32.4</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1076000s1/" target="_blank">МАСЛИНЫ ИБЕРИКА ЧЕРНЫЕ БЕЗ КОСТОЧКИ 300Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1076000s1/" target="_blank">1076000</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">37.5</td>
<td align="right">37.5</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1075523s1/" target="_blank">ОЛИВКИ МАЭСТРО ДЕ ОЛИВА С КРЕВЕТКАМИ 300Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1075523s1/" target="_blank">1075523</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">46.5</td>
<td align="right">46.5</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1159826s1/" target="_blank">СПАГЕТТИ DIVELLA С ДОБАВЛЕНИЕМ ПОМИДОРОВ И ШПИНАТА 500Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1159826s1/" target="_blank">1159826</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">78.2</td>
<td align="right">78.2</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1016713s1/" target="_blank">ЛАПША ЯИЧНАЯ BUITONI LA RASAGNOLE №8 ФЕТТУЧИНЕ ГНЕЗДА 250Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1016713s1/" target="_blank">1016713</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">83.1</td>
<td align="right">83.1</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1073322s1/" target="_blank">САХАР ПЕСОК 2КГ ФАС</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1073322s1/" target="_blank">1073322</a></td>
<td align="center">пак</td>
<td align="right">1</td>
<td align="right">79</td>
<td align="right">79</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1007553s1/" target="_blank">ЦУКАТЫ ДАРЫ ПРИРОДЫ АНАНАС И ПАПАЙЯ,150Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1007553s1/" target="_blank">1007553</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">44.8</td>
<td align="right">44.8</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1103617s1/" target="_blank">САЛФЕТКИ ЧИСТЫЙ ДОМ КЛАССИКА КЛЕТКА В АССОРТИМЕНТЕ 25Х25 100ШТ</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1103617s1/" target="_blank">1103617</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">16.9</td>
<td align="right">16.9</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1183576s1/" target="_blank">ГУБКА HOME QUEEN ДЛЯ ПОСУДЫ ПРОФИЛЬ 5 ШТ, АРТИКУЛ: HPA009E</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1183576s1/" target="_blank">1183576</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">30.6</td>
<td align="right">30.6</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/9147s1/" target="_blank">ГОЛЕНЬ ТРОЕКУРОВО ЦЫПЛЕНКА БРОЙЛЕРА ОХЛАЖДЕННАЯ 0,8-1,2КГ ФАС</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/9147s1/" target="_blank">9147</a></td>
<td align="center">уп</td>
<td align="right">2</td>
<td align="right">178.8</td>
<td align="right">357.6</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1050444s1/" target="_blank">ПЮРЕ ГЕРБЕР БРОККОЛИ С 4-Х МЕСЯЦЕВ 80Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1050444s1/" target="_blank">1050444</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">31.6</td>
<td align="right">31.6</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1159800s1/" target="_blank">САЛФЕТКИ JOHNSON'S BABY НЕЖНАЯ ЗАБОТА 2*64 ШТ</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1159800s1/" target="_blank">1159800</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">127.9</td>
<td align="right">127.9</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1193115s1/" target="_blank">ПЕЛЕНКИ ДЕТСКИЕ FLUFSAN BABY ВПИТЫВАЮЩИЕ 60*90СМ, 10ШТ</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1193115s1/" target="_blank">1193115</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">189.9</td>
<td align="right">189.9</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1109457s1/" target="_blank">ПЮРЕ ГЕРБЕР ЦВЕТНАЯ КАПУСТА С 4 МЕСЯЦЕВ 80Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1109457s1/" target="_blank">1109457</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">31.6</td>
<td align="right">31.6</td></tr><tr bgcolor="f1f1f1">
<td><a href="http://www.utkonos.ru/item/1128881s1/" target="_blank">ПЮРЕ HEINZ КАБАЧКИ С 4-Х МЕСЯЦЕВ 80Г</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1128881s1/" target="_blank">1128881</a></td>
<td align="center">бан</td>
<td align="right">1</td>
<td align="right">32.1</td>
<td align="right">32.1</td></tr><tr bgcolor="ffffff">
<td><a href="http://www.utkonos.ru/item/1188031s1/" target="_blank">ДОЗАТОР PLAST TEAM ДЛЯ СЫПУЧИХ ПРОДУКТОВ 1,1Л ЦВЕТА В АССОРТИМЕНТЕ</a></td>
<td align="center"><a href="http://www.utkonos.ru/item/1188031s1/" target="_blank">1188031</a></td>
<td align="center">шт</td>
<td align="right">1</td>
<td align="right">127.7</td>
<td align="right">127.7</td></tr></tbody></table>
'''

soup = BeautifulSoup(html,fromEncoding="windows-1251")

table = soup.findAll('table')[0]
rows = table.findAll('tr')

for tr in rows:
cols = tr.findAll('td')

nameprod = cols[0].a
article = cols[1].a
unit = cols[2].string
count = cols[3].string
price = cols[4].string
total = cols[5].string

entry = (nameprod, article, unit, count, price, total)

print entry
Пример вывода программы:
(<a href="http://www.utkonos.ru/item/1193115s1/" target="_blank">ПЕЛЕНКР&#65533; ДЕТСКР&#65533;Р• FLUFSAN BABY Р’РџР&#65533;ТЫВАЮЩР&#65533;Р• 60*90РЎРњ, 10РЁРў</a>, <a href="http://www.utkonos.ru/item/1193115s1/" target="_blank">1193115</a>, u'\u0448\u0442', u'1', u'189.9', u'189.9')
(<a href="http://www.utkonos.ru/item/1109457s1/" target="_blank">ПЮРЕ ГЕРБЕР ЦВЕТНАЯ КАПУСТА С 4 МЕСЯЦЕВ 80Г</a>, <a href="http://www.utkonos.ru/item/1109457s1/" target="_blank">1109457</a>, u'\u0448\u0442', u'1', u'31.6', u'31.6')
(<a href="http://www.utkonos.ru/item/1128881s1/" target="_blank">ПЮРЕ HEINZ КАБАЧКР&#65533; РЎ 4-РҐ МЕСЯЦЕВ 80Р“</a>, <a href="http://www.utkonos.ru/item/1128881s1/" target="_blank">1128881</a>, u'\u0431\u0430\u043d', u'1', u'32.1', u'32.1')
(<a href="http://www.utkonos.ru/item/1188031s1/" target="_blank">ДОЗАТОР PLAST TEAM ДЛЯ СЫПУЧР&#65533;РҐ ПРОДУКТОВ 1,1Р› ЦВЕТА Р’ РђРЎРЎРћР РўР&#65533;МЕНТЕ</a>, <a href="http://www.utkonos.ru/item/1188031s1/" target="_blank">1188031</a>, u'\u0448\u0442', u'1', u'127.7', u'127.7')

(<a href="http://www.utkonos.ru/item/1188031s1/"target="_blank">Содержание для nameprod</a>, <a href="http://www.utkonos.ru/item/1188031s1/" target="_blank">1188031</a>, u'\u0448\u0442', u'1', u'127.7', u'127.7')
Вопросы:
1. Как сделать,чтобы nameprod и arricles имели не тег a, а содержание
тега а. (Содержание для nameprod) ?
2. Проблема с кодировкой. Страничка html в win1251. необходимо
переводить в utf8.
regall
kapitonz
1.  Как сделать,чтобы nameprod и arricles имели не тег a, а содержание
тега    а. (Содержание для nameprod) ?
nameprod = cols[0].a.string
kapitonz
2.  Проблема  с  кодировкой.  Страничка  html  в  win1251.  необходимо
переводить в utf8.
html.decode('cp1251')
kapitonz
Ошибка при cols.a.string :-(

Traceback (most recent call last):
File “F:\tmp\1\test.py”, line 196, in <module>
nameprod = cols.a.string
AttributeError: ‘NoneType’ object has no attribute ‘string’
regall
kapitonz
Ошибка при cols.a.string :-(
Значит “a” тега внутри cols нет, поставьте трейс, и сравните с html, возможно там пустая клетка в таблице, обработайте эту ситуацию.
kapitonz
regall
kapitonz
Ошибка при cols.a.string :-(
Значит “a” тега внутри cols нет, поставьте трейс, и сравните с html, возможно там пустая клетка в таблице, обработайте эту ситуацию.
1.Как же нет, специально в пример привел:
<a href="http://www.utkonos.ru/item/1188031s1/“target=”_blank">Содержание для nameprod</a>
это вывод nameprod = cons.a
2. Что интересно, что если сделать nameprod=cons.string, то print nameprod выводит none
pyuser
На этом форуме уже не однократно рекомендовали забыть про BeautifulSoup и пользоваться “правильными” :) инструментами, как то html5lib и lxml
import html5lib

html = html_из_первого_поста

doc = html5lib.parse(html,
treebuilder="lxml", namespaceHTMLElements=False)
for tr in doc.iterfind(".//table/tbody/tr"):
entry = [td.text for td in tr.iter() if td.text]
print(", ".join(entry[1:]))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB