如何使用Python爬取需要登录权限的网站数据
Python 需登录站点数据爬取实现方案
针对你当前基于requests + BeautifulSoup的基础代码,提供两种常用的登录态适配方案:
方案1:Session会话维持登录(推荐,适配绝大多数表单登录场景
这个方案通过requests.Session()自动管理Cookie,模拟浏览器的会话逻辑,无需手动处理Cookie参数,适配大多数常规账号密码登录的站点。
实现步骤:
- 打开浏览器F12开发者工具的「网络」面板,手动触发一次登录操作,抓取登录请求的提交地址、请求参数(一般包含用户名、密码字段,部分站点会带csrf_token、验证码等附加参数)
- 优先请求登录页面提取附加参数(比如csrf_token),再提交登录请求,登录成功后直接用同一个Session请求目标数据页面即可
修改后的示例代码如下:
import requests from bs4 import BeautifulSoup headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.3" } # 初始化会话对象,自动维护Cookie session = requests.Session() session.headers.update(headers) # 第一步:提交登录请求(替换为你抓包得到的真实登录接口地址、参数 login_url = "http://ema.todrock.com/login" login_data = { "username": "你的账号", "password": "你的密码", # 有其他校验参数比如csrf_token可直接加在这里 } login_resp = session.post(login_url, data=login_data) # 可通过状态码、返回体关键字判断是否登录成功,确认成功后再执行后续请求 # 第二步:登录成功后用同一个session请求目标页面 r = session.get("http://ema.todrock.com/list-details/5") soup = BeautifulSoup(r.content, "html.parser") table = soup.find_all("div",class_="table-responsive") for r in table: print(r)
如果站点登录页有csrf校验,需要先请求登录页提取csrf参数再提交,示例提取逻辑:
# 先请求登录页面提取csrf参数 login_page_resp = session.get("登录页面地址") soup_login = BeautifulSoup(login_page_resp.content, "html.parser") csrf_token = soup_login.find("input", attrs={"name": "csrf_token"})["value"] # 再把csrf_token加入login_data后再提交登录请求
方案2:手动携带Cookie请求(适合临时小规模爬取)
如果不需要频繁切换账号、或者登录逻辑复杂不想逆向,可直接用浏览器登录后复制的Cookie发起请求:
- 浏览器登录目标站点后,在F12网络面板随便找一个站点的请求,复制请求头中的Cookie值,加到headers里即可,示例代码:
import requests from bs4 import BeautifulSoup headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.3", "Cookie": "你从浏览器复制的Cookie字符串" # 替换为实际Cookie值 } r = requests.get("http://ema.todrock.com/list-details/5", headers=headers) soup = BeautifulSoup(r.content, "html.parser") table = soup.find_all("div",class_="table-responsive") for r in table: print(r)
注意:Cookie存在有效期,过期后需要重新登录复制新的Cookie
补充说明
若站点登录有验证码、密码加密、滑块验证等反爬机制,需要对应处理验证码识别、加密参数逆向逻辑即可,上述会话维持逻辑不变。
内容的提问来源于stack exchange,提问作者Arslan Aziz
相关产品推荐
相关产品推荐

