我使用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
知道我做错了吗?
谢谢!
答案 0 :(得分:1)
HTML的奇怪之处。 BeautifulSoup尽力而为,但有时它无法解析它。
尝试移动<link>
内的第一个<head>
元素,这可能会有帮助。
答案 1 :(得分:1)
我认为你做错了什么。
这是第二个使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('<!]]>', ''))
答案 2 :(得分:0)
您可以尝试使用lxml lib。
from lxml.html import parse
doc = parse('http://java.sun.com').getroot()
post = doc.cssselect('div#topmenucontainer')