Форум сайта python.su
сам код:
import urllib2
import html5lib
from html5lib import treebuilders
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
soup = parser.parse(urllib2.urlopen("http://a-el.ru/catalog.htm").read())
soup = parser.parse(f)
table_soup = soup.table.tbody.tr.td.table.tbody.tr.nextSibling.nextSibling.tbody
for tag in table_soup:
print tag.contents[0].name
/var/lib/python-support/python2.6/html5lib/inputstream.py:367: DeprecationWarning: object.__init__() takes no parameters
str.__init__(self, value)
Traceback (most recent call last):
File "./examles.py", line 9, in <module>
print tag.contents[0].name
File "/var/lib/python-support/python2.6/BeautifulSoup.py", line 427, in __getattr__
raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__.__name__, attr)
AttributeError: 'NavigableString' object has no attribute 'contents'
Офлайн
andreykyzВ BeautifulSoup есть два принципиально разных вида объектов Tag и NavigableString. Разница в том, что Navigable string соответствует текстовой строке и не имеет атрибута contents (по нему нельзя производить поиск в глубину, так как это уже “листик” дерева элементов)
'NavigableString' object has no attribute ‘contents’
andreykyzСудя по всему, вылетает здесь, когда в переменной ‘tag’ попадает не тег, а строковое значение
print tag.contents.name
import urllib2
import html5lib
from html5lib import treebuilders
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
soup = parser.parse(urllib2.urlopen("http://a-el.ru/catalog.htm").read())
soup = parser.parse(f)
table_soup = soup.table.tbody.tr.td.table.tbody.tr.nextSibling.nextSibling.tbody
for tag in table_soup:
if isinstance(tag, Tag):
print tag.contents[0].name
Офлайн
regallхм понятно.
В BeautifulSoup есть два принципиально разных вида объектов Tag и NavigableString. Разница в том, что Navigable string соответствует текстовой строке и не имеет атрибута contents (по нему нельзя производить поиск в глубину, так как это уже “листик” дерева элементов)
Офлайн
trs = soup.findAll(name = "tr")
for tr in trs:
tds = tr.findAll(name = "td")
allTags = soup.findAll(True)
Отредактировано (Ноя. 19, 2009 15:38:20)
Офлайн
теперь вот такая ошибка:
print tds
UnicodeEncodeError: 'ascii' codec can't encode characters in position 233-239: ordinal not in range(128)
soup = parser.parse(open("catalog.htm"))
table_soup = soup.table.tbody.tr.td.table.tbody.tr.nextSibling.nextSibling.tbody
print table_soup.tr
Офлайн
andreykyzЭта ошибка описана в документации
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 233-239: ordinal not in range(128)
Офлайн
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib2
import html5lib
from html5lib import treebuilders
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
soup = parser.parse(urllib2.urlopen("http://a-el.ru/catalog.htm").read())
table_soup = soup.table.tbody.tr.td.table.tbody.tr.nextSibling.nextSibling.tbody
print table_soup.tr #вот это работает
trs = soup.findAll(name = "tr")
for tr in trs:
tds = tr.findAll(name = "td")
print unicode(str(tds), 'cp1251') #вот это не работает
/var/lib/python-support/python2.6/html5lib/inputstream.py:367: DeprecationWarning: object.__init__() takes no parameters
str.__init__(self, value)
<tr><th colspan="5" align="center" class="th1"><a name="secure" class="intable">Безопасность</a></th></tr>
Traceback (most recent call last):
File "./examles.py", line 16, in <module>
print unicode(str(tds), 'utf-8')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 233-239: ordinal not in range(128)
Отредактировано (Ноя. 21, 2009 13:18:23)
Офлайн
Как я понял ошибка возникает при экспорте из beautifulsoup
Офлайн
Еще не работает вот это :(
parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
soup = parser.parse(open("catalog.htm"))
table_soup = soup.table.tbody.tr.td.table.tbody.tr.nextSibling.nextSibling.tbody
print soup.contents[0].name # не работает
Traceback (most recent call last):
File "./examles.py", line 15, in <module>
print soup.contents[0].name
File "/var/lib/python-support/python2.5/BeautifulSoup.py", line 427, in __getattr__
raise AttributeError, "'%s' object has no attribute '%s'" % (self.__class__.__name__, attr)
AttributeError: 'Declaration' object has no attribute 'name'
Офлайн
andreykyzОпять же, если копнуть глубже в HTML и даже в ваш catalog.hm, то вы наверняка увидите в первой строчке что-то типа такого
AttributeError: ‘Declaration’ object has no attribute ‘name’
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
soup.contents[0]
soup.contents[0].nexSibling
Офлайн