使用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>
这基本上是我感兴趣的一些领域。令我惊讶的是,我可以获得一些字段,但不是全部。
答案 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。