2

Pythonを使用して、ソースが非常に大きいWebページ(一部のユーザーの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>

基本的に私が興味を持っている分野です。私が驚いたのは、すべてではありませんが、いくつかの分野を取得できることです。

4

2 に答える 2

2

このページはいくつかのjavascriptを実行する可能性があり、javascriptはいくつかのコンテンツを生成します。ツイル
をお 試しください。Mechanize に基づいていますが、javascriptを実行します。 Pythonのサンプル:

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

もう1つのオプションは、Node.jsでZombie.jsを使用することです。
このライブラリはツイルよりもさらにうまく機能し、ブラウザレスソリューションです。
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
于 2012-07-24T10:20:23.070 に答える
2

FacebookはJavascript指向です。ブラウザに表示されるページソースは、JSコードが実行された後のDOMです(ページソースはとにかく頻繁に変更されます。ブラウザを自動化する(Seleniumを使用する)か、機械化などの他のツールを試す必要がある場合があります...または、適切なFBアプリを調べてFBAPIを使用します。

于 2012-07-24T10:21:53.323 に答える