在使用python请求进行抓取之前,请等待网页完全加载

时间:2017-12-17 00:51:21

标签: javascript python html web-scraping linkedin

我目前正试图从LinkedIn上的特定网页抓取数据。我有一个能够登录到LinkedIn的脚本,但是当我尝试访问包含数据的页面时,我遇到了麻烦。当我打电话给requests.get(data_url)时,我最终得到了在LinkedIn加载实际页面内容之前显示的LinkedIn加载屏幕的html。在实际抓取html数据之前,有没有办法让LinkedIn等待LinkedIn显示网站数据?我基本上需要让页面完全呈现,然后才能得到'内容。我目前的脚本如下。

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)

1 个答案:

答案 0 :(得分:1)

如果网页的任何部分是动态呈现的,例如使用Javascript,那么beautifulsoup可能无法使用它。

我使用Selenium + PhantomJS。我加载页面(等待它完全加载)然后输入登录详细信息。 Selenium有很好的API,它允许您以编程方式检查特定的html元素并等待它们出现,这在这种情况下非常有用。