🗒️Django页面爬虫登录
2023-11-18
| 2023-11-18
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
Django写的页面默认会有csrf验证,故爬虫会稍微麻烦一点。

1.报错:CSRF cookie not set 或者CSRF token missing or incorrect

都是CSRF token未写好的缘故,post请求时的参数除了username和password,注意看浏览器里的其他参数,可能叫X-CSRFToken 或者 X-CSRF-Token ,或者csrfmiddlewaretoken
怎么拿到CSRF token
# 创建Session对象 session = requests.Session() response = session.get(url1) # 从响应的 Cookie 中获取 CSRF Token soup = BeautifulSoup(response.text, 'html.parser') #{'name': 'csrfmiddlewaretoken'}中的csrfmiddlewaretoken是自己在HTML里找的命名 csrf_token = soup.find('input', {'name': 'csrfmiddlewaretoken'})['value']
或者
# 创建Session对象 session = requests.Session() response = session.get(url1) csrf_token = None for cookie in response.cookies: #cookie.name == 'csrftoken'基本是固定的,不需要改动 if cookie.name == 'csrftoken': csrf_token = cookie.value break if csrf_token is None: # 没有获取到 CSRF Token print('Failed to get CSRF Token') exit()

2.post登录成功后,get请求仍打开登录页

前提已经使用session保持会话了,get仍打开登录页,可以考虑login_data是否除了username password csrftoken,还缺参数,对着浏览器debug看,比如
# 设置登录信息,包括用户名、密码和_csrf_token等 login_data = { 'username': username, 'password': password, 'csrfmiddlewaretoken': csrf_token, 'this_is_the_login_form': 1, 'next': '/' }
 
  • Python
  • python Excel处理特殊字符写入多个sheetpython实现VLOOKUP功能
    目录