Python爬虫技术(一)--模拟登陆

python简单爬虫(下):实战应用——抓取豆瓣同城、登陆图书馆查询图书归还 在掌握了urllib几个模块的相关用法后,接下来就是进入实战步骤了~ 阅读详情

最近对网络爬虫比较感兴趣,正巧赶上学习Python阶段,于是准备用这把加农炮来实现我的网络爬虫学习之路。本次学习就由我所在学校的教务系统作为实验对象,哇咔咔,尽情的血虐教务系统吧!(不过好像暴露我的身份了,没关系,技术为尊)。

在进行我们的爬虫实验前,我们先要了解我们浏览器是如何工作的。关于HTTP等协议的工作流程我就不推荐各种繁杂的书籍博客了,古人说的好,纸上得来终觉浅,绝知此事要躬行。我们可以对浏览器进行抓包观察流程嘛!来,翠花,上酸菜!
这次我们要用的是火狐浏览器以及firebug插件,没有插件的可以在火狐应用商店下载。一切准备就绪,就可以开干了。首先,我们在浏览器输入登陆页面地址,按F12键打开firebug。(看看我们学校的拉面女神还是很有味道的......)
接下来我们添上用户名和密码,并观察HTML文件,观察表单如何提交。这时有一个小技巧,我们可以Ctrl+F键查找post关键字定位到表单代码:

我们可以看到除了学号和密码之外,还有五项隐藏表单项。这里我可以说明,除了lt是一个随机字符串外,其他几个均为定值。我们先登陆一下看看有什么变化。

我们可以看到post信息一共有8项,这八项我们之前都在HTML文件中看到过了。再继续看一看头信息中都有什么内容呢。

这个时候我们就可以封装数据包来模拟登陆了。模拟登陆最主要的是什么呢?就是我们用代码来模拟浏览器的动作。首先我们去定义一个头信息。头信息内容就按照我们浏览器中得到的封装。这里有一个很重要的项 Referer,是反爬虫技术所设立的。该项为了证明你是从正确网页登陆,而不是随便从哪旮旯跳过来,还有User-Agent项也很重要,表明了我们的身份是一个浏览器,而不是其他玩意儿。其余的估计可以精简,有兴趣的可以试一下。
 #构造头部信息
    head = {
               'Accept'     : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
               'Accept-Encoding' : 'gzip,deflate',
               'Accept-Language' : 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
               'Host'       : 'ids.chd.edu.cn',
               'Connection' : 'keep-alive',
               #反爬虫技术,这个说明我们是从这个网页进入的
               'Referer'    : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal',
               'Upgrade-Insecure-Requests' : '1',
               #伪装浏览器
               'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0'
               }
接着,我们来定义一个post,post中有一个lt项,我们之前看到了,是之前的登录页面中的一个表单值,这个是个随机值,我们要想正确填写它,这就需要我们先得到这个值,我们这里先get页面内容,然后查找这个值
    posturl = "http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal"

    #保存cookies,不保存cookie很危险,登陆成功后不保存cookie服务器将不知道你已经登录
    #或者说服务器不知道你是你,就导致获得页面失败
    s = requests.session()
    circle = s.get(posturl).text
    #查找lt字符串
    #长大信息门户中有几个隐藏表单项,lt表单项为一个随机字符串
    #其余几个均为固定字符串
    #所以我们必须先得到lt字符串
    ltString = '<input type="hidden" name="lt" value=".*?"'
    ltAnswer = re.findall(ltString, circle)
    lt = ltAnswer[0].replace('<input type="hidden" name="lt" value="','')
    #这里必须转换为utf8格式,否则为Unicode格式,导致乱码失败
    lt = lt.replace('"','').encode("utf-8")	
#构造Post数据
    postData = {'_eventId' : "submit",
                'btn1'     : "",
                'dllt'     : "userNamePasswordLogin",
                'execution': "e1s1",
                'lt'       : lt,
                'password' : "*******",
                'rmShown'  : "1",
                'username' : "123456789",
            }
接下来,就到了见证奇迹的时刻。我们要代表浏览器向服务器发送数据了n(*≧▽≦*)n。同样,代码如下:
loginhtml = s.post(posturl,data=postData,headers=head)


    url2 = 'http://portal.chd.edu.cn'
    head2 = {
             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0',
             'Referer'   : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal'}

    scorehtml = s.get(url2,headers=head2)

    print scorehtml.text.decode('gbk','ignore')
这时,我们获得了登陆成功后的页面。有的服务器有IP地址限制,需要不断更换IP地址,不过Python也给了我们解决办法,关于这方面的知识大家有兴趣的可以百度,我就不给出具体信息了~~
好了,最后上完整代码,当当当当~
# -*- coding: utf-8 -*-
import requests
import sys
import urllib2
import re
if __name__ == "__main__":

    ## 这段代码是用于解决中文报错的问题
    reload(sys)
    sys.setdefaultencoding("utf8")

    posturl = "http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal"

    #保存cookies,不保存cookie很危险,登陆成功后不保存cookie服务器将不知道你已经登录
    #或者说服务器不知道你是你,就导致获得页面失败
    s = requests.session()
    circle = s.get(posturl).text
    #查找lt字符串
    #长大信息门户中有几个隐藏表单项,lt表单项为一个随机字符串
    #其余几个均为固定字符串
    #所以我们必须先得到lt字符串
    ltString = '<input type="hidden" name="lt" value=".*?"'
    ltAnswer = re.findall(ltString, circle)
    lt = ltAnswer[0].replace('<input type="hidden" name="lt" value="','')
    #这里必须转为utf8格式,否则传过去的值为Unicode编码,导致乱码失败
    lt = lt.replace('"','').encode("utf-8")

    #构造头部信息
    head = {
               'Accept'     : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
               'Accept-Encoding' : 'gzip,deflate',
               'Accept-Language' : 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
               'Host'       : 'ids.chd.edu.cn',
               'Connection' : 'keep-alive',
               #反爬虫技术,这个说明我们是从这个网页进入的
               'Referer'    : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal',
               'Upgrade-Insecure-Requests' : '1',
               #伪装浏览器
               'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0'
               }
    #构造Post数据
    postData = {'_eventId' : "submit",
                'btn1'     : "",
                'dllt'     : "userNamePasswordLogin",
                'execution': "e1s1",
                'lt'       : lt,
                'password' : "*******",
                'rmShown'  : "1",
                'username' : "123456789",
            }
    loginhtml = s.post(posturl,data=postData,headers=head)


    url2 = 'http://portal.chd.edu.cn'
    head2 = {
             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0',
             'Referer'   : 'http://ids.chd.edu.cn/authserver/login?service=http://portal.chd.edu.cn/index.portal'}

    scorehtml = s.get(url2,headers=head2)

    print scorehtml.text.decode('gbk','ignore')
好了,本次实验到此结束,欢迎一起学习更多知识!
ANSA二次开发在线帮助:ANSA和μETA API文档   为了方便大家学习ANSA二次开发,我将ANSA和μETA二次开发的官方文档整合到了我的个人网站CAECoder中,大家点击ANSA和μETA API官方帮助文档进行访问即可查看。   本站也将开展对ANSA和μETA API文档的翻译工作,请大家持续关注! ANSA和μETA API文档   ANSA和μETA脚本接口是一个应用程序编程接口(API),允许开发人员访问ANSA和μETA核心功能和数据。   ANSA和μETAAPI是Python编程语言的扩展。 Python Python简. 阅读详情

相关推荐

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

python模拟excel登录插件,Python爬虫自动化办工实战案例--借助xlwings实现excel调用Python...

Python爬虫自动化办工实战案例--借助xlwings实现excel调用PythonPython爬虫自动化办工实战案例--借助xlwings实现excel调用Python爬虫Python爬虫自动化办工实战案例??本案例将实现excel集成用户自定义Python函数(xlwings UDFs),并从excel中通过调用函数,轻松爬取对应微博博文的转评赞数据。1. excel安装xlwings??首...

weixin_31910545的博客 719

手把手教你用LangChain4j打造一个“会追问”的AI客服:以航空货运下单为例

本文详细介绍了如何使用LangChain4j构建一个能够主动追问的航空货运AI客服系统。通过对话状态管理、信息缺口识别和渐进式引导等核心技术,实现高效的多轮对话交互。文章包含从交互设计到代码实现的完整指南,特别强调了提示词(Prompt)在优化AI行为中的关键作用,帮助开发者打造更智能的客服解决方案。

weixin_28731223的博客 154

爬虫相关文章收藏:pyppeteer 、Burpsuite

探测selenium-webdriver及破解淘宝对selenium-webdriver的拦截 https://www.kebook.cn/9060/ 使用爬虫技术实现 Web 页面资源可用性检测 https://debugtalk.com/post/requests-crawler/ pyppeteer 绕过selenium检测,实现淘宝登陆 https://blog.youkuaiyun.com...

sydjcwx 540

MAPPO实战:从理论到代码的协作智能体训练指南

本文详细介绍了MAPPO算法在多智能体协作训练中的实战应用,从理论基础到代码实现全面解析。通过对比PPO与MAPPO的差异,深入讲解CTDE框架、网络架构设计、参数调优等关键环节,并提供实际项目中的调参经验和常见问题解决方案,帮助开发者快速掌握这一强化学习前沿技术。

weixin_42561040的博客 264

VINS技术路线与代码详解

VINS技术路线 写在前面:本文整和自己的思路,希望对学习VINS或者VIO的同学有所帮助,如果你觉得文章写的对你的理解有一点帮助,可以推荐给周围的小伙伴们,当然,如果你有任何问题想要交流,欢迎随时探讨。话不多说,下面上正文。 VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 参考文档:1.VINS-Mono A R...

wangshuailpp的博客 7万+

模拟登陆广工统一认证系统

前言 之前一直尝试实现模拟登陆广工统一认证系统,但是都未能取得成功。最近在同学的帮助下,终于实现了这一目标。 一直失败的原因:URL的错误选择 错误URL:http://authserver.gdut.edu.cn/authserver/loginservice=http%3A%2F%2Fjxfw.gdut.edu.cn%2Fnew%2FssoLogin 正确的URL(可以从html里得到): h...

qq_42777577的博客 1842

华为OD机试 - 音乐小说内容重复识别 - 并查集(Java 双机位C卷 200分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 159

SpringBoot 实现CAS Server统一登录认证

​ CAS(Central Authentication Service)中心授权服务,是一个开源项目,目的在于为Web应用系统提供一种可靠的单点登录。​ 在整个认证的流程中的整个流程大概是:首先由CAS Client(我们的客户端应用)发起请求,CAS Client 会重定向到CAS Server进行登录,CAS Server进行账户校验且多个CAS Client 之间可以共享登录的 session ,。​ 从结构上看,CAS 包含两个部分:和。

LiuCJ_20000的博客 9974

【网络与爬虫 44】Canvas指纹伪造技术:突破浏览器图形渲染检测的终极指南

Canvas和WebGL指纹是现代反爬虫系统中最难绕过的检测技术之一,它们通过分析浏览器图形渲染的细微差异来识别用户设备。本文将深入解析Canvas和WebGL指纹的工作原理,探讨其在反爬虫检测中的应用,并提供多种有效的伪造和绕过策略,帮助开发者理解并应对这些高级检测技术。

熵数实验室 1206

点云语义分割:PointNet训练S3DIS数据集

文章目录一、数据准备1.1、数据下载二、训练三、测试 项目地址:pointnet 此次我们是用pointnet网络来做语义分割。代码在pointnet项目中的sem_seg文件夹下,里面也有README.md介绍了训练的过程。 一、数据准备 1.1、数据下载 原始数据下载 处理好的h5格式数据下载 二、训练 三、测试 ...

zhaoguanhua的博客 4176

Python爬虫学习记录——19.去哪儿网模拟登陆

文章目录模拟登陆Cookie实战补充:豆瓣登陆 模拟登陆 本篇博客主要是讲解如何模拟登陆去哪儿网,使用的工具是Chrome的开发者工具和requests库。两者都是之前学过的知识,这次我们把它们放在一起应用 什么是模拟登陆 有些网站需要用户登录后才会有权限回去到所需要的信息,此时可以设计爬虫进行模拟登录 怎么做到模拟登陆 把这句话补全就是: 怎么(让机器)模拟(人在浏览器上的行为)登录(指定的网站...

赈川 1106

Android Audio基础——系统服务(二)

AudioService 继承自 IAudioService.Stub。IAudioService.Stub 类很明显是通过 IAudioService.aidl 自动生成的。AudioService 位于 Binder Native 端。AudioManager 拥有 AudioService 的 Binder Proxy 端,是 AudioService 在客户端的一个代理。几乎所有客户端对 AudioManager 进行的请求,最终都会交由 AudioService 实现。

小旭的专栏 2071

利用python爬虫技术本福特_Python爬虫技术(一)--模拟登陆

好了,最后上完整代码,当当当当~# -*- coding: utf-8 -*-import requestsimport sysimport urllib2import reif __name__ == "__main__":## 这段代码是用于解决中文报错的问题reload(sys)sys.setdefaultencoding("utf8")posturl = "http://ids.chd.e...

weixin_39717152的博客 251

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

我是如何开始能写python爬虫的?给入门python小白一条清晰的学习路线

1、缺少合理的学习路径,上来 Python、HTML 各种学,极其容易放弃;2、网上的资料非常零散,而且对小白不友好,很多看起来云里雾里;3、没有专业的人知道,会走很多的弯路,自己都不知道要往哪里学。所以很多爬虫工程师,都会有跟我一样的体会:爬虫这玩意儿不需要多精湛的代码技术,也不需要多深的数据库知识,只要有合理的学习路径以及实操项目,都能学好。

m0_60607971的博客 1080

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python爬虫登录网站_【技术贴】简单的Python爬虫:POST模拟登陆校园网

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼原文在我的博客 http://blog.zhenlanbing.com/archives/211很长时间以来在Linux环境下编程,使用Virtual Box安装CentOS,用NAT网络和端口转发,再使用Putty连接localhost进行编程。但最近我需要在其他教室连接到虚拟机,用Windows远程桌面是一个解决方案。但是只有Windows系统可用,...

weixin_39982017的博客 741

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

模拟登陆人人网--手动复制粘贴cookies

用自己的账号手动登陆下,复制cookies

python爬虫人工智能大数据 1189

详解爬虫处理滑动验证的技术细节和思想以案例说明

这篇文章将详解爬虫处理登陆过程中出现的滑动验证的细节,不管你是小白还是大神都老少皆宜;和人工智能过招,你将学会下面核心技术: 如何真实模拟人为轨迹 如何准确快速识别滑块距离 如何防止被识别为爬虫 滑动验证变种的处理 下一步滑动验证如何升级 学完上面后可在某京某宝上自行验证。通过本篇教程,你将学会处理滑动验证的核心思想并用之与人工智能对抗;学了后再面试中你讲成为面试官眼中的 Python 爬虫大...

GitChat 1289

Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))

1. 为什么需要模拟登陆?      获取cookie,能够爬取登陆后的页面的数据 2.使用cookie模拟登陆的场景    (1) cookie过期时间很长,常见于一些不规范的网站     (2) 能在cookie过期之前把搜有的数据拿到     (3) 配合其他程序使用,比如其使用selenium把登陆之后的cookie获取到,然后保存到本地,          scrapy发送...

Mogul的博客 1006

2020/04/06 05-模拟登陆和多线程异步爬虫

学习爬虫第一步学习模拟登陆 只要是这里记住密码 登陆了才有退出 可以查看用户 那么它是如何知道你登录了,最重要的是cookie,其他值比如session,打开浏览器早就没了,application本地存储有一大堆东西 加密的数据,有些数据是base64编码后加密过再发过来的 现在把这个数据删除掉。下一次发送请求的时候,oscid就没了 现在就需要登录了 现在把登录后,cookie...

qq_42227818的博客 503

python爬虫cookie模拟登陆

python爬虫cookie模拟登陆 自己学习网络上面的课外知识有一年多了,自己也比较喜欢去学那些,在大学里老师不会教你去学爬虫,开发web,数据分析,unity3d,Linux,git等等,但是我觉得这些才是真正有用的,而那些课程几乎是靠一门丢一门,真正实用的没有多少,这是我的感觉。 然后,自己在网上学这学那学了一年多了,学起来感觉也很艰难,一步一个脚印,总是会遇到一些坑,自己卡一段时间,但是通...

qq_43683503的博客 516

python爬虫反爬策略_用Python语言做爬虫有哪些策略可以对抗反爬虫?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼作为爬虫工程师,时常要为不断更新的反爬虫策略而苦恼,究竟是魔高一尺还是道高一丈,从来就没有真正的分出过胜负,一个为了完成爬虫工作,一个为了保卫网站不被爬虫入侵,进行着一场持久的抗战。对于Python爬虫来说,有哪些常见的反反爬策略呢?一、设置等待时间很多反爬策略都包含了检测访问频率,一旦发现了超人类访问速度,坚决封杀,既然如此,那就模仿人工访问频率,访问...

weixin_39640904的博客 72

基于pyppeteer实现最新版知乎模拟登陆

现在还在爬知乎的同学,想必已经被知乎这个登陆搞得头大了吧,哈哈哈哈哈!!用selenium吧,不行,会被检测出来,用requests构造表单吧,提交的加密参数复杂,而且还不给出那些参数名,知乎的攻城狮为了反爬,很牛B好吧!!!我还试过用selenium结合mitmproxy去修改其中对webdriver检测的那部分js代码参数,以失败告终,可能是我没找对js代码。。。 没关系,现在有新方法可以搞定...

jay_wonder的博客 5678

python网络爬虫---模拟登陆

为什么要模拟登陆       网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面。 模拟登陆的步骤:      一 保存用户的登录信息 :Session和Cookie        session:       import requests s=requests.Session() r=s.post(url,da...

qq_33643943的博客 412

视频教程-清华-尹成老师-Python爬虫day28-Python

清华-尹成老师-Python爬虫day28 毕业于清华大学,曾担任Googl...

weixin_32003681的博客 160
上一篇: Ring 3层枚举进程的四种方法
下一篇: Python网页爬虫之中文乱码
ToringZZZ
博客等级 码龄11年 27粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值