需要登录的网站爬虫详解

这篇具有很好参考价值的文章主要介绍了需要登录的网站爬虫详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

  1. 介绍一下请求状态原理
  2. 分析需要登录的网站请求特点
  3. 分析登陆前后请求差异
  4. 如何从接口分析一步步构建一个合理的登录爬虫
  5. 巧方法解决登录

需要登录的网站请求特点

登录分析1

我们打开这个链接https://login2.scrape.center/,如果是未登录状态,页面如下
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
我们输入用户名与密码,点击登录,同时打开f12抓包。获取到的抓包结果如下:

需要登录的网站爬虫详解,python爬虫综合,爬虫,python
网络请求内有一个状态码为302的登录请求,这个请求就是登录请求

需要登录的网站爬虫详解,python爬虫综合,爬虫,python
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
这里整个登录与请求流程就是

  1. 请求登录页面,输入用户名密码登录
  2. 获取登录响应的响应头Set-Cookie字段【这个字段就是用于为后续请求构造请求头的】
  3. 请求头带着Set-Cookie内的字段,获取登录后的数据

登录分析2

我们再来分析一个需要登录的网站:
https://login3.scrape.center/login
我们访问登录页面,输入用户名密码登录,并f12抓包
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
登录接口预览如下:
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
我们查看登录接口的响应,响应如下:
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
我们接着分析数据接口:
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
后续的数据请求只要携带请求头字段Authorization为jwt拼接登录后的token值就可以维持登录状态的请求。

登录分析3

我们再来分析这个网站,输入网址https://www.faxin.cn/lib/zyfl/zyflcontent.aspx?gid=A341401&libid=010101

点击右上角的登录按钮,进入登录页面;同时打开f12抓包,抓包结果如下:
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
输入用户名与密码点击登录。抓包结果如下:
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
需要登录的网站爬虫详解,python爬虫综合,爬虫,python
通过以上的三个需要登录的网站分析,我们发现只要网站的某些数据请求是需要登录之后才能获取到的,我们在只需要分析登录接口,同时解析出登录状态维持的字段【可能是cookie也可能是其他字段,第2个登录分析在登录响应内字段名为token,而在数据请求内为Authorization】,我们并携带在后续的数据请求内,就可以获取到登录后的数据。

注意

需要注意的是:

  1. 维持登录状态的字段值可能会失效,我们在开发爬虫中,需要及时校验是否cookie或其他登录状态值失效,如果失效,我们需要再次构造登录,更新字段值
  2. 登录爬虫我们对于数据请求需要控制频率,尽可能用更多的账号,建立一个独立存在的维持登录状态的参数池【如:token池或cookie池等】,这样便于即使维护与更新,将爬虫的各个阶段解耦,提升效率。而且如果账号请求数据频繁,可能会被目标网站封禁账号,我们需要考虑到账号封禁的风险与ip封禁等风险,并使用代理ip等方法规避这些风险。

案例分析

案例一

https://login2.scrape.center/
默认重定向导致无法获取到重定向前的cookie

案例一爬虫源码
# coding=utf-8
import requests

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://login2.scrape.center',
    'Pragma': 'no-cache',
    'Referer': 'https://login2.scrape.center/login',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}

data = {
    'username': 'admin',
    'password': 'admin',
}

response = requests.post('https://login2.scrape.center/login', headers=headers, data=data, allow_redirects=False)
status = response.status_code
################### 直接获取响应的cookie字段 ################
logined_cookies = response.cookies
print(status)
print(logined_cookies)
# 将cookies输出为字典
print(dict(logined_cookies))  # {'sessionid': 'h1d41qkv8qzrlhk0ykfzx54g3ph0od6j'}

################# 从响应头内获取cookie ###################
headers_resp = dict(response.headers)
cookies = headers_resp.get('Set-Cookie')  # 获取到cookie字符串
print(cookies)  # sessionid=h1d41qkv8qzrlhk0ykfzx54g3ph0od6j; expires=Wed, 24 Jan 2024 23:40:31 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=Lax

案例二

https://login3.scrape.center/login
爬虫源码:

# coding=utf-8

import requests

headers = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/json;charset=UTF-8',
    'Origin': 'https://login3.scrape.center',
    'Pragma': 'no-cache',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}

json_data = {
    'username': 'admin',
    'password': 'admin',
}

response = requests.post('https://login3.scrape.center/api/login', headers=headers, json=json_data)

token = response.json()['token']
authorization = 'jwt '+token
print(token)
headers_login = {
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Authorization': authorization,
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Pragma': 'no-cache',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}

params = {
    'limit': '18',
    'offset': '0',
}

response = requests.get('https://login3.scrape.center/api/book/', params=params, headers=headers_login)
print(authorization)
print(response.json())


运行结果如下:【爬虫构造成功】
需要登录的网站爬虫详解,python爬虫综合,爬虫,python

案例三

法信爬虫文章来源地址https://www.toymoban.com/news/detail-816374.html

登录脚本
# coding=utf-8
import time

import requests

cookies = {
    'ASP.NET_SessionId': 'at0wmkahm3o1yf2uzdcyo24z',
    'insert_cookie': '89314150',
    'showUpdate': '2024-01-05',
    'Hm_lvt_a317640b4aeca83b20c90d410335b70f': '1704930439',
    'clx': 'n',
    'sid': 'at0wmkahm3o1yf2uzdcyo24z',
    'isAutoLogin': 'off',
    'Hm_lpvt_a317640b4aeca83b20c90d410335b70f': str(int(time.time())),
}

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    # 'Cookie': 'ASP.NET_SessionId=at0wmkahm3o1yf2uzdcyo24z; insert_cookie=89314150; showUpdate=2024-01-05; Hm_lvt_a317640b4aeca83b20c90d410335b70f=1704930439; clx=n; sid=at0wmkahm3o1yf2uzdcyo24z; isAutoLogin=off; Hm_lpvt_a317640b4aeca83b20c90d410335b70f=1704930535',
    'Origin': 'https://www.faxin.cn',
    'Pragma': 'no-cache',
    'Referer': 'https://www.faxin.cn/login.aspx?url=/lib/zyfl/zyflcontent.aspx%3Fgid=A341404%26libid=010101',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
}

data = {
    '__VIEWSTATE': '/wEPDwUJNzUzMzc2OTcyZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgUKaXNSZW1lbWJlcgULaXNBdXRvTG9naW7CqpQN/iu5+xaD2O1P5o5lGgo7gA==',
    '__VIEWSTATEGENERATOR': 'C2EE9ABB',
    'WebUCHead_Special1$hiddIsLogin': '0',
    'WebUCSearchNoAdvSearch1$lib': '',
    'keyword': '',
    'user_name': '',# 你的用户名
    'user_password': '', # 你的密码
    'isLogout': '0',
}

response = requests.post(
    'https://www.faxin.cn/login.aspx?url=%2flib%2fzyfl%2fzyflcontent.aspx%3fgid%3dA341404%26libid%3d010101',
    cookies=cookies,
    headers=headers,
    data=data,
    allow_redirects=False
)

status = response.status_code
################### 直接获取响应的cookie字段 ################
logined_cookies = response.cookies
print(status)
print(logined_cookies)
# 将cookies输出为字典
print(dict(logined_cookies))

到了这里,关于需要登录的网站爬虫详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫requests+综合练习详解

    Day2 - 1.requests第一血_哔哩哔哩_bilibili requests作用:模拟浏览器发请求 requests流程:指定url - 发起请求 - 获取响应数据 - 持续化存储 输入后,爬取搜索结果的页面信息 https://www.sogou.com/web?query=%E8%B5%B5%E6%B5%A9%E7%84%B6_asf=www.sogou.com_ast=w=01019900p=40040100ie=utf8from=index-nologins_from

    2024年01月23日
    浏览(30)
  • 爬虫笔记--Selenium实现有验证码网站模拟登录

    代码如下: 一点说明: 安利个巨好用的识别验证码的库 ddddocr gitHub:https://github.com/sml2h3/ddddocr 可能会在版本上遇到问题,我的报错参考这篇文档解决:https://blog.csdn.net/zhuchengchengct/article/details/124854199 我用的版本作为参考:python是3.9.13,ddddocr是1.4.2 如有问题,欢迎大家批评

    2024年02月16日
    浏览(43)
  • 爬虫案例-使用Session登录指定网站(JS逆向AES-CBC加密+MD5加密)

    总体概览:使用Session登录该网站,其中包括对password参数进行js逆向破解                 (涉及加密:md5加密+AES-CBC加密) 难度:两颗星 目标网址:aHR0cHM6Ly93d3cuZnhiYW9nYW8uY29tLw== 下面文章将分为四个部分:         1、定位主体加密函数,进行断点         2、分

    2024年02月09日
    浏览(71)
  • Python爬虫需要那些步骤 ?

    Python爬虫主要用于从网页上获取数据,以下是一般的Python爬虫步骤: 1. 寻找目标网站: 确定你要爬取数据的目标网站。确保你有合法的权限和许可,不要违反网站的使用规定。 2. 安装所需库: 使用Python的pip工具,安装必要的库,如Requests、BeautifulSoup、Selenium等,这些库将帮

    2024年02月15日
    浏览(50)
  • python爬虫,发送请求需要携带cookies

    此网站,需要先注册登录!!! 页面源代码: python代码: 运行结果:有数据 {\\\'next_max_id\\\': -1, \\\'items\\\': [], \\\'next_id\\\': -1} 此实例只是为了验证,某些网站反爬必须需要携带cookies。

    2024年01月16日
    浏览(75)
  • 3. 爬取自己CSDN博客列表(自动方式)(分页查询)(网站反爬虫策略,需要在代码中添加合适的请求头User-Agent,否则response返回空)

    1. 如何爬取自己的CSDN博客文章列表(获取列表)(博客列表)(手动+python代码方式) 2. 获取自己CSDN文章列表并按质量分由小到大排序(文章质量分、博客质量分、博文质量分)(阿里云API认证) https://dontla.blog.csdn.net/?type=blog https://blog.csdn.net/community/home-api/v1/get-business-lis

    2024年02月12日
    浏览(39)
  • 使用Python爬虫定制化开发自己需要的数据集

    在数据驱动的时代,获取准确、丰富的数据对于许多项目和业务至关重要。本文将介绍如何使用Python爬虫进行定制化开发,以满足个性化的数据需求,帮助你构建自己需要的数据集,为数据分析和应用提供有力支持。 1.确定数据需求和采集目标 在开始定制化开发之前,首先需

    2024年02月10日
    浏览(48)
  • 【爬虫】python爬虫爬取网站页面(基础讲解)

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 1. 导入必要的库 requests 库用于发送HTTP请

    2024年02月08日
    浏览(44)
  • python爬虫实战(1)——网站小说

    经过学习基础,我们学以致用一下子,爬取小说,注意这个小说本身是免费的哦,以后再进阶。 本次为实战记录,笔者很多碎碎念可忽略 基于requests库和lxml中的xpath编写的爬虫,目标小说网站域名http://www.365kk.cc/ 这是网上找的,小说网址很多,而且没有很多反扒机制,新手友

    2024年02月13日
    浏览(35)
  • Python爬虫:如何使用Python爬取网站数据

    更新:2023-08-13 15:30 想要获取网站的数据?使用Python爬虫是一个绝佳的选择。Python爬虫是通过自动化程序来提取互联网上的信息。本文章将会详细介绍Python爬虫的相关技术。 在使用Python爬虫之前,我们需要理解网络协议和请求。HTTP是网络传输的重要协议,它是在Web浏览器和

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包