js 抓取网页内容(有没有办法让请求在实际html数据之前等待LinkedIn显示站点数据)
优采云 发布时间: 2022-01-28 01:20js 抓取网页内容(有没有办法让请求在实际html数据之前等待LinkedIn显示站点数据)
我目前正在尝试从 LinkedIn 上的特定页面抓取数据。我有一个可以登录 LinkedIn 的脚本,但是当我尝试访问收录数据的页面时,它遇到了障碍。当我调用 requests.get(data_url) 时,我最终得到了 LinkedIn 加载屏幕的 html,它在 LinkedIn 加载实际页面内容之前显示。有没有办法让请求在实际抓取 html 数据之前等待 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)
最佳答案
如果页面的任何部分是动态渲染的,比如使用Javascript,beautifulsoup可能无法使用。
我使用 Selenium + PhantomJS。我加载页面(等待它完全加载)并输入登录详细信息。 Selenium 有一个很好的 API,允许您以编程方式检查特定的 html 元素并等待它们出现,这在这种情况下非常有用。
关于 javascript - 在抓取 python 请求之前等待网页完全加载,我们在 Stack Overflow 上发现了一个类似的问题: