我无法获得HTML页面的完整源代码

时间:2012-07-24 10:11:43

标签: python web-crawler

使用Python,我想在一个网页上抓取数据,这个网页的来源非常大(它是某个用户的Facebook页面)。

说URL是我尝试抓取的网址。我运行以下代码:

import urllib2

usock = urllib2.urlopen(url)
data = usock.read()
usock.close()

数据应该包含我正在抓取的页面的来源,但由于某种原因,它不包含直接与页面源进行比较时可用的所有字符。我不知道我做错了什么。我知道我试图抓取的页面最近没有更新,所以这不是因为我遗漏了一些最近的数据。

有人有线索吗?

编辑:我缺少的信息就像:

<code class="hidden_elem" id="up82eq_33"><!-- <div class="mbs profileInfoSection"><div class="uiHeader uiHeaderTopAndBottomBorder uiHeaderSection infoSectionHeader"><div class="clearfix uiHeaderTop"><div><h4 tabindex="0" class="uiHeaderTitle">Basic Information</h4></div></div></div><div class="phs"><table class="uiInfoTable mtm profileInfoTable uiInfoTableFixed"><tbody><tr><th class="label">Networks</th><td class="data"><div class="uiCollapsedList uiCollapsedListHidden" id="up82eq_32"><span class="visible">XXXX</span></div></td></tr></tbody></table></div></div> --></code>

这基本上是我感兴趣的一些领域。令我惊讶的是,我可以获得一些字段,但不是全部。

2 个答案:

答案 0 :(得分:2)

此页面可能会执行一些javascript,javascript会生成一些内容 试试Twill
它基于Mechanize,但执行javascript Python中的示例:

from twill.commands import *
go("http://google.com/")
fv("f", "q", "test")
submit("btnG")
info() #shows page info
show() #shows html

另一种选择是在Node.j上使用Zombie.js 这个库比Twill更好用,它是无浏览器的解决方案 Coffeescript中的样本:

zombie = require "zombie"
browser = new zombie()
browser.visit "https://www.google.ru/", =>
    browser.fill "q", "node.js"
    browser.pressButton "Поиск в Google", ->
        for item in browser.queryAll "h3.r a"
            console.log item.innerHTML

答案 1 :(得分:2)

Facebook以Javascript为导向。在任何JS代码运行之后,您在浏览器中看到的页面源是在之后的DOM (并且页面源经常会发生变化)。您可能必须自动化浏览器(使用Selenium),或尝试其他工具,例如机械化...或者查看适当的FB应用程序并使用FB API。