等待网页完全加载,然后再使用 python 请求进行抓取

Wait for Webpage to fully load before scraping with python requests

我目前正在尝试从 LinkedIn 上的特定页面抓取数据。我有一个能够登录 LinkedIn 的脚本,但是当我尝试访问包含数据的页面时,我 运行 陷入了困境。当我调用 requests.get(data_url) 时,我最终会在 LinkedIn 加载实际页面内容之前显示 LinkedIn 加载屏幕的 html。有没有办法让请求等待 LinkedIn 在实际抓取 html 数据之前显示站点数据?我基本上需要让页面完全呈现,然后才能 'get' 内容。我当前的脚本如下。

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)

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

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