我目前正在尝试从 LinkedIn 上的特定页面抓取数据。我有一个能够登录 LinkedIn 的脚本,但当我尝试访问包含数据的页面时遇到了障碍。当我打电话时requests.get(data_url)
,我最终得到了 LinkedIn 加载屏幕的 html,该屏幕在 LinkedIn 加载实际页面内容之前显示。有没有办法让请求等待 LinkedIn 显示站点数据,然后再实际抓取 html 数据?我本质上需要让页面完全呈现,然后才能“获取”内容。我当前的脚本如下。
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 元素并等待它们出现,这在这种情况下非常有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)