2017-10-23 3 views
3

javascriptによってコンテンツが生成された要素のテキストにアクセスしようとしています。たとえば、Twitterの株式数をthis siteから取得するなどです。Pythonを使用してjavascriptクエリによって生成された要素を掻き集める

urllibとpyqtを使用してページのHTMLを取得しようとしましたが、コンテンツにはjavascriptを生成する必要があるため、urllib/pyqtの応答にそのHTMLは存在しません。私は現在、この作業にセレンを使用していますが、それは私が望むより長くかかります。

ブラウザでページを開くことなくこのデータにアクセスできますか?

この質問はすでに過去に頼まれましたが、私が見つけた結果がc# specificかの例を作業するgone dead

+0

セレンが通常でありますこれのための最良の賭け。データを取得している特定のjavascriptリクエストを分離できない限り、 – chasmani

答えて

2

ので、持っているソリューションへのリンクを提供どちらかである:

import urllib 
import requests 
import json 

url = "https://daphnecaruanagalizia.com/2017/10/crook-schembri-court-today-pleading-not-crook/" 

encoded = urllib.parse.quote_plus(url) 
# encoded = urllib.quote_plus(url) # for python 2 replace previous line by this 
j = requests.get('https://count-server.sharethis.com/v2.0/get_counts?url=%s' % encoded).text 
obj = json.loads(j) 
print(obj['clicks']['twitter'] + obj['shares']['twitter']) 

# => 5008 

説明:

ウェブページを調べると、これがリクエストされていることがわかります。

https://count-server.sharethis.com/v2.0/get_counts?url=https%3A%2F%2Fdaphnecaruanagalizia.com%2F2017%2F10%2Fcrook-schembri-court-today-pleading-not-crook%2F&cb=stButtons.processCB&wd=true 

ブラウザに貼り付けるとすべての回答が得られます。 URLで少し演奏すると、余分なパラメータを削除すると素晴らしいjsonが得られることがわかります。

ご覧のとおり、リクエストのurlパラメータを、Twitterのカウントを取得するページのURLに置き換えるだけで済みます。あなたはその後、BeautifulSoupライブラリにdriver.page_sourceを渡し、SeleniumのWebブラウザを起動した後、次のような何かができる

+0

ありがとうございます。私はこれが働いたことを確認することができます。リクエストを見つけた方法に関する詳細を私に教えてください。私は同じことをしたいと思いますが、コメントの数については、コメントの数を取得します。私はクロムを使用していて、ネットワークタブからリクエストを探していました。希望のリクエストを特定するのに役立つ手口はありますか? – ganninu93

+1

あなたは "javascript"、 "XHR"、 "WS"をフィルタリングすることができました "応答"タブを開き、 "twitter"を見つけるまでリクエストをスクロールしました –

+0

コメントの数については、disqus –

1

(残念ながら場所にファイアウォールがある仕事でこれをテストすることはできません):

soup = BeautifulSoup(driver.page_source, 'html.parser') 

shares = soup.find('span', {'class': 'st_twitter_hcount'}).find('span', {'class': 'stBubble_hcount'}) 
関連する問題