>>> import urllib
>>> html = urllib.urlopen('http://kurilka.livejournal.com/').read()
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> soup.findAll('link', {'type':'application/rss+xml'})[0]['href']
u'http://kurilka.livejournal.com/data/rss'
Ну, думаю, гораздо более демонстративно будет, если я вытяну RSS прямо для этого же блога, куда пишу сейчас этот пост. Но не тут-то было...
Упало оно с криком HTMLParser.HTMLParseError: bad end tag: u"</scr'+'ipt>". Причём, оказывается, что это программеры Google попирают спецификации W3C и не экранируют "</" в тексте скрипта. Поэтому пришлось пока сделать временную "затычку":
Упало оно с криком HTMLParser.HTMLParseError: bad end tag: u"</scr'+'ipt>". Причём, оказывается, что это программеры Google попирают спецификации W3C и не экранируют "</" в тексте скрипта. Поэтому пришлось пока сделать временную "затычку":
>>> import urllib
>>> html = urllib.urlopen('http://django-newbie.blogspot.com/').read()
>>> html = html.replace("</src'", '')
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> soup.findAll('link', {'type':'application/rss+xml'})[0]['href']
u'http://django-newbie.blogspot.com/feeds/posts/default?alt=rss'
Вот так и воюем: то с нестрогими спецификациями, то с нестрогим их соблюдением...
P.S. И ещё больше добила борьба с blogger.com, жестоко коверкающим тэги
Странно, суп не грешил такими вещами. Да, он крайне криво некоторые страницы парсит, ну с кем не бывает. Посмотри, там у него несколько разных парсеров, два на моей памяти.
ОтветитьУдалитьХотя кошернее будет использовать html5lib ;-).
..bw
гугл говорит, что я не один с такой проблемой столкнулся, однако...
ОтветитьУдалитьа html5lib гляну, спасиб.