请求协助:Python爬取WordPress后台回电请求页面数据
解决WordPress后台页面请求返回登录页的问题
WordPress后台默认不支持requests的auth参数对应的HTTP基本认证,而是通过表单登录+会话Cookie维持权限,所以直接用auth参数请求会被重定向到登录页。下面是正确的实现方案:
核心思路
- 用
requests.Session()维持会话,自动保存登录后的Cookie - 先访问登录页面,提取必要的登录验证字段(如
_wpnonce) - 提交登录表单完成身份认证
- 用已认证的会话请求目标"回电请求"页面
- 用BeautifulSoup解析页面提取姓名和电话数据
完整代码示例
import requests from bs4 import BeautifulSoup # 配置信息 WP_LOGIN_URL = "https://mywebsite.com/wp-login.php" TARGET_PAGE_URL = "https://mywebsite.com/wp-admin/admin.php?page=ar-contactus-key-requests&paged=1" USERNAME = "你的用户名" PASSWORD = "你的密码" # 创建会话对象,自动管理Cookie session = requests.Session() # 1. 获取登录页面,提取_wpnonce验证字段 login_page = session.get(WP_LOGIN_URL) soup_login = BeautifulSoup(login_page.text, "html.parser") wp_nonce = soup_login.find("input", {"name": "_wpnonce"})["value"] # 2. 构造登录表单数据 login_data = { "log": USERNAME, "pwd": PASSWORD, "wp-submit": "登录", # 英文WP需改为"Log In" "redirect_to": TARGET_PAGE_URL, "_wpnonce": wp_nonce, "testcookie": "1" } # 3. 提交登录请求 session.post(WP_LOGIN_URL, data=login_data) # 4. 请求目标页面 target_response = session.get(TARGET_PAGE_URL) # 验证登录状态并提取数据 if "wp-admin" in target_response.url and "登录" not in target_response.text: print("登录成功,开始提取数据") soup_target = BeautifulSoup(target_response.text, "html.parser") # 需根据页面实际HTML结构调整选择器,示例假设数据在表格行中 request_rows = soup_target.find_all("tr")[1:] # 跳过表头行 for row in request_rows: cols = row.find_all("td") if len(cols) >= 2: name = cols[0].get_text(strip=True) phone = cols[1].get_text(strip=True) print(f"姓名: {name}, 电话: {phone}") else: print("登录失败,请检查用户名、密码或站点配置")
注意事项
- 表单字段适配:如果是英文WordPress,
wp-submit的值要改为"Log In";若登录页面有其他隐藏字段,需根据实际HTML补充到login_data中 - 安全插件拦截:若站点安装了Wordfence等安全插件,可能触发人机验证,需手动处理验证或调整插件规则
- 选择器调整:提取姓名和电话的CSS选择器需匹配目标页面的实际HTML结构,可通过浏览器开发者工具查看元素类名/ID来编写准确选择器
内容的提问来源于stack exchange,提问作者Arash Rafiee
相关产品推荐
相关产品推荐

