2016-09-24 9 views
0

python 3.5(Beautifulsoup)を使用してWebサイトをスクラップしています。私はソースコードのすべてを読むことができますが、私は(スクリプトへの参照である)成功なしでdisqusから埋め込まれたコメントを取得しようとしています。pythonを使って別のWebページに埋め込まれたコメント(disqus)を取得する

htmlコードのソースの一部は、次のようになります。

var disqus_identifier = "node/XXXXX"; 
script type='text/javascript' src='https://disqus.com/forums/siteweb/embed.js'; 

srcはスクリプト機能に送信します。

私はseleniumを使用してstackoverflowの提案を読んだことがありますが、これは成功しないようにするのは本当に苦労しました。私はセレンがブラウザをエミュレートすることを理解しています。しかし、Webdriversに問題があり、正しく動作していません。だから、私はこのオプションを落としました。

私はこのスクリプトを実行して、そのコメントで.jsを取得したいと考えています。 私は可能な解決策がPyV8であることを発見しました。しかし、私はPythonでインポートすることはできません。 私はインターネットの記事を読んで、私はそれを見つけましたが、うまくいきません。

私は崇高なテキスト3をインストールし、私は手動でpyv8-win64の-P3をダウンロード:

C:\ Users \ユーザーmyusernameと指定\のAppData \ローミング\崇高テキスト3つの\インストール済みのパッケージ\ PyV8 \ pyv8-win64の-P3

しかし、私は入れません:

ImportError: No module named 'PyV8'.

を誰かが、私は非常に非常に感謝するよ、私を助けることができる場合。

+0

私はそれを行う方法を発見しました。私は、埋め込まれたフレーム(Javaスクリプトで行われているものの1つ)を指すURLを構築し、それを解析するのに十分です。 – pacode

答えて

1

したがって、ネットワークトラフィックを調べることでDisqus APIを構築できます。ページソースに必要なすべてのデータが存在します。 Disqus APIのようにいくつかのクエリ文字列を送信します。最近私はDisqus APIからコメントを抽出しました。ここにサンプルコードがあります。

例:ここでは スープ - ページのソースとparams_dict = json.loads(str(soup).split("embedVars = ")[1].split(";")[0])

def disqus(params_dict,soup): 
    headers = { 
    'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' 
    } 
    comments_list = [] 
    base = 'default' 
    s_o = 'default' 
    version = '25916d2dd3d996eaedf6cdb92f03e7dd' 
    f = params_dict['disqusShortname'] 
    t_i = params_dict['disqusIdentifier'] 
    t_u = params_dict['disqusUrl'] 
    t_e = params_dict['disqusTitle'] 
    t_d = soup.head.title.text 
    t_t = params_dict['disqusTitle'] 
    url = 'http://disqus.com/embed/comments/?base=%s&version=%s&f=%s&t_i=%s&t_u=%s&t_e=%s&t_d=%s&t_t=%s&s_o=%s&l='%(base,version,f,t_i,t_u,t_e,t_d,t_t,s_o) 
    comment_soup = getLink(url) 
    temp_dict = json.loads(str(comment_soup).split("threadData\" type=\"text/json\">")[1].split("</script")[0]) 
    thread_id = temp_dict['response']['thread']['id'] 
    forumname = temp_dict['response']['thread']['forum'] 
    i = 1 
    count = 0 
    flag = True 
    while flag is True: 
     disqus_url = 'http://disqus.com/api/3.0/threads/listPostsThreaded?limit=100&thread='+thread_id+'&forum='+forumname+'&order=popular&cursor='+str(i)+':0:0'+'&api_key=E8Uh5l5fHZ6gD8U3KycjAIAk46f68Zw7C6eW8WSjZvCLXebZ7p0r1yrYDrLilk2F' 
     comment_soup = getJson(disqus_url) 

それは、JSONを返し、あなたがコメントを抽出することができますコメントを見つけることができます。これがあなたに役立つことを願っています。

+0

ありがとう@RamenChef、私はそれを使用しました。私はFacebookのコメントのために同じ3つをしようとしているが、はるかにどのようにAPIのキーを取得する明確ではない。 あなたはこれについて考えていますか?トークンを取得するためにFacebookのAPIを使用しないようにしたいと思います(FBアカウントを持つことが必要です)。 – pacode

+0

したがって、@ pacodeを使用すると、ネットワークを監視してAPIキーを取得できます。 – Prashant

0

Facebookの埋め込みコメントについては、FacebookのグラフAPIを使用してjson形式のコメントを抽出できます。

例 -

Facebookのコメント - https://graph.facebook.com/comments/?ids= "link of page"

+0

答え@Prashantに感謝します。明らかに、このソリューションはもはや利用できません。トークンが必要です。 "message": "このリソースを要求するにはアクセストークンが必要です。" 私は、2011年から2015年のどこかでAPIが変更されたと思います。 – pacode

+0

私はまだこの問題に取り組んでいます、私は今あなたが私に提案したものを正確に行うことができます。私はURLのIDを回復することができます(Facebookのプラグインがコメントを書いたフレームのHTML coudeソースを見てください)。'comments /?ids = [found_id]' このIDまたはプラグインが指しているURLを取得できますか? 光に感謝します! – pacode

+0

だから私はその解決策を見つけました。これは、FB APIトークンを使ってfbデータを抽出できる新しいリンクです.- 'https://graph.facebook.com/849499125131056/comments/?access_token=[FB_Access Token]' (あなたはそのページのネットワークを研究することができます)。 page.nowでFacebookプラグインのソートドロップダウンボックスをクリックしてみてください。ネットワークを調べてページIDを取得できます。これがうまくいくことを期待してください。@pacode – Prashant

関連する問題