2017-12-17 17 views
0

現在、LinkedInの特定のページからデータをスクラップしようとしています。 LinkedInにログインできるスクリプトがありますが、データが含まれているページにアクセスしようとすると困惑します。 requests.get(data_url)と呼ぶと、LinkedInが実際のページコンテンツを読み込む前に表示されるLinkedInの読み込み画面のhtmlになります。実際にhtmlデータをスクラップする前にLinkedInがサイトデータを表示するのをリクエスト待ちにする方法はありますか?私は本質的に、ページを完全にレンダリングしてから、コンテンツを取得できるようにする必要があります。私の現在のスクリプトは以下の通りです。Webページが完全に読み込まれてから、Pythonリクエストで掻き集めるまで待ちます。

import requests 
from bs4 import BeautifulSoup 

client = requests.Session() 

HOMEPAGE_URL = 'https://www.linkedin.com' 
LOGIN_URL = 'https://www.linkedin.com/uas/login-submit' 

html = client.get(HOMEPAGE_URL).content 
soup = BeautifulSoup(html) 
csrf = soup.find(id="loginCsrfParam-login")['value'] 

login_information = { 
    'session_key':'EMAIL', 
    'session_password':'PASSWORD', 
    'loginCsrfParam': csrf, 
} 

client.post(LOGIN_URL, data=login_information) 

r = client.get(data_url) 

答えて

0

Webページの任意の部分を動的にレンダリングされている場合は、Javascriptを使用して、たとえば、beautifulsoupはそれで作業することができない場合があります。

私はSelenium + PhantomJSを使用します。私はページをロードし(完全にロードされるのを待ちます)、ログインの詳細を入力します。 Seleniumには、特定のhtml要素をプログラムでチェックし、そのような場合に非常に便利なものが表示されるまで待つことができる素晴らしいAPIがあります。

関連する問題