【问题标题】:I can't get the whole source code of an HTML page我无法获取 HTML 页面的完整源代码
【发布时间】:2012-07-22 15:20:51
【问题描述】:

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

假设 URL 是我要抓取的 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>

基本上是我感兴趣的某个领域。令我惊讶的是我可以得到一些个领域,但不是全部。

【问题讨论】:

  • javascript 可能正在加载一些内容,而您的爬虫没有执行它?
  • 你检查过代码字符集吗?
  • @dyoser 我确实检查了代码字符集,感谢您的建议,但不幸的是这不是我的问题的原因。

标签: python web-crawler


【解决方案1】:

此页面可能会执行一些 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.js 上使用 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

【讨论】:

  • 我刚试过斜纹布,但效果不佳。事实上,我比 urllib2 缺少更多信息
【解决方案2】:

Facebook 主要面向 Javascript。您在浏览器中看到的页面源代码是在任何 JS 代码运行之后的 DOM after(并且页面源代码无论如何都会经常更改)。您可能必须使浏览器自动化(使用 Selenium),或尝试其他工具,例如 mechanize... 或查看合适的 FB 应用程序并使用 FB API。

【讨论】:

  • 我刚刚尝试过这样的机械化:resp = mechanize.urlopen(url); txt = resp.read() 但是还是同样的问题...
  • @S4M 可能只需要使用 Selenium 然后seleniumhq.org - 请记住,在某些用户事件发生(例如单击项目或扩展菜单)之前,数据可能不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
相关资源
最近更新 更多