Я не могу ничего поцарапать с BeautifulSoup - PullRequest
2 голосов
/ 18 августа 2011

Я использую BeautifulSoup для очистки веб-содержимого.

Я учусь на этом примере кода, но я всегда получаю ответ "Нет".

Код:

import urllib2
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(urllib2.urlopen('http://www.velocidadcuchara.com/2011/08/helado-platano-light.html').read())

post = soup.find('div', attrs={'id': 'topmenucontainer'})

print post

Есть идеи, что я делаю не так?

Спасибо !!

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Я не думаю, что вы делаете что-то не так.

Это второй тег сценария, который сбивает с толку BeautifulSoup.Тег выглядит следующим образом:

<script type='text/javascript'>
<!--//--><![CDATA[//><!--
var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])

function fixPNG(myImage) 
{
    if ((version >= 5.5) && (version < 7) && (document.body.filters)) 
    {
       var imgID = (myImage.id) ? "id='" + myImage.id + "' " : ""
       var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : ""
       var imgTitle = (myImage.title) ? 
                     "title='" + myImage.title  + "' " : "title='" + myImage.alt + "' "
       var imgStyle = "display:inline-block;" + myImage.style.cssText
       var strNewHTML = "<span " + imgID + imgClass + imgTitle
                  + " style=\"" + "width:" + myImage.width 
                  + "px; height:" + myImage.height 
                  + "px;" + imgStyle + ";"
                  + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
                  + "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>"
       myImage.outerHTML = strNewHTML     
    }
}
//--><!]]>
</script>

, но BeatifulSoup, похоже, считает, что он все еще находится в комментарии или что-то в этом роде и включает в себя остальную часть файла в качестве содержимого тега сценария.

print str(soup.findAll('script')[1])[:2000]

и вы поймете, что я имею в виду.

Если вы удалите CDATA, то вы должны найти правильные разборы страниц:

soup = BeautifulSoup(
    urllib2.urlopen('http://www.velocidadcuchara.com/2011/08/helado-platano-light.html')
    .read()
    .replace('<![CDATA[', '').replace('<!]]>', ''))
1 голос
/ 18 августа 2011

Что-то странное с вашим HTML. BeautifulSoup старается изо всех сил, но иногда он просто не может разобрать его.

Попробуйте переместить первый <link> элемент внутрь <head>, что может помочь.

0 голосов
/ 21 декабря 2011

Вы можете попробовать использовать lxml lib.

lxml статья

from lxml.html import parse
doc = parse('http://java.sun.com').getroot()
post = doc.cssselect('div#topmenucontainer')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...