如何使用python-request抓取LinkedIn页面?

1 投票
1 回答
3216 浏览
提问于 2025-04-18 14:13

我用下面的代码想要抓取一个LinkedIn页面,但这个方法似乎让我无法登录,只显示了一个未授权的主页。

#/usr/bin/env python3
import requests
from bs4 import BeautifulSoup


payload = {
'session-key': 'my account',
'session-password': 'my password'
}

URL = 'https://www.linkedin.com/uas/login'
s = requests.session()
s.post(URL, data=payload)

r = s.get('http://www.linkedin.com/nhome')
soup = BeautifulSoup(r.text)
print(soup)

`

1 个回答

2

这比你目前的情况要复杂得多。

你需要做的事情大致如下:

  • 访问 https://www.linkedin.com/uas/login
  • BeautifulSoup 解析返回的内容,以获取登录表单,包括所有隐藏的表单字段等。(其中的CSRF字段特别重要,因为服务器会拒绝没有正确值的POST请求。)
  • 根据解析出来的登录表单数据,加上你的用户名和密码,构建一个POST数据字典。
  • 把这些数据POST到 https://www.linkedin.com/uas/login-submit(你可能还需要伪装一些请求头,因为它可能只接受标记为AJAX的请求。)
  • 最后访问 http://www.linkedin.com/nhome

你可以通过在Chrome或Firefox中打开开发者工具,查看网络标签,观察整个登录过程。

像这样应该可以工作:

import requests
from bs4 import BeautifulSoup

# Get login form
URL = 'https://www.linkedin.com/uas/login'
session = requests.session()
login_response = session.get('https://www.linkedin.com/uas/login')
login = BeautifulSoup(login_response.text)

# Get hidden form inputs
inputs = login.find('form', {'name': 'login'}).findAll('input', {'type': ['hidden', 'submit']})

# Create POST data
post = {input.get('name'): input.get('value') for input in inputs}
post['session_key'] = 'username'
post['session_password'] = 'password'

# Post login
post_response = session.post('https://www.linkedin.com/uas/login-submit', data=post)

# Get home page
home_response = session.get('http://www.linkedin.com/nhome')
home = BeautifulSoup(home_response.text)

撰写回答