我目前正试图从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)
答案 0 :(得分:1)
如果网页的任何部分是动态呈现的,例如使用Javascript,那么beautifulsoup可能无法使用它。
我使用Selenium + PhantomJS。我加载页面(等待它完全加载)然后输入登录详细信息。 Selenium有很好的API,它允许您以编程方式检查特定的html元素并等待它们出现,这在这种情况下非常有用。