Python爬⾍中如何通过post发请求,浏览器控制台抓包教程,有道翻译爬⾍程序,通过py。。。
⽬录
⼀、浏览器控制台抓包
在很多的⼯作中都是需要进⾏抓取到⽹络的相关数据进⾏分析,来进⾏查看访问到服务器返回的数据是否正确,来判断是否是⾃⼰想要的数据,可以通过这些数据做相关内容测试,和⼆次开发,常⽤的接⼝测试⽅法。
1.打开⽅式以及常⽤选项
打开浏览器,按F12打开控制台或者右键点击检查。控制台界⾯如下,右侧即为控制台。控制台有数个选项,我们依次来说。
Elements:查看元素节点位置,看到Elements左侧的⿏标按钮(或者Ctrl+shift+c),选中后点击⽹页⽂件的任意位置,Elements 栏会显⽰⿏标停留地⽅的Elements节点属性。
Console:控制台,交互模式,可以对JavaScript代码进⾏测试。
Sources:格式化输出并可以打断点调试JS代码,助于分析爬⾍中⼀些参数。
Performance:主要⽤于做前端性能优化,可以监控到毫秒级别,⽹络,cpu等性能在数据收发时的状态。
2.控制台NetWrok
NetWrok的作⽤是查看被抓取⽹络数据包,也可以检查cookies,Headers请求头等信息。下图是Network⼯作图以及⼀些被抓取到的⽹络⽂件。
ALL:抓取所有的⽹络数据包
XHR:抓取异步加载的⽹络数据包,如Ajax⽂件
JS:抓取所有的JS⽂件
CSS:抓取样式⽂件
Img/Media:抓取图⽚,视频
下图是cookies的信息,⽐如我们账号密码也包含在⾥⾯:
⼆、Python爬⾍中如何通过post发请求
1.Post请求
我们在使⽤Python做爬⾍的时候,通常使⽤的是requests模式的get()⽅法,这⾥介绍Post⽅法。做过前端的应该知道,前端页⾯要提交请求有post和get⽅法,post可以隐藏参数,也可以对传输内容加密,⼀般在表单(from)数据中,我们进⾏登录也是⽤的表单提交,还有各种⽹站的注册信息也是。在⽹页中,除了我们通过url访问⽹页时⽤get⽅法外,只要你⽤得着提交数据的,绝⼤多是都是⽤的post请求。
2.Python中使⽤post请求
在python中⽤post请求很容易,需⽤⽤到requests模块,与get⽅法不同的是,post⽅法需要传⼊data
⽅法,data在这⾥是⼀个字典,⽤于装提交的参数信息。
rep=requests.post(url,data,headers)
三、有道翻译爬⾍程序,通过python伪装翻译(post案例)
1.需求分析
我们要做的就是⽤python提交请求翻译的内容,然后由python接受,其实就相当于⽤电脑来模拟⼈的操作,有什么⽤呢,主要有两点:
1)适合⼤批量翻译:对于较多的翻译内容,⽤机器来请求⽐⼈⼿动点击要效率⾼的多
2)作为第三⽅插件:当你在设计⾃⼰的程序代码时,如果要⽤到翻译的功能,你可以⾃⼰写⼀个翻译程序,其难度可想⽽知,也可以写⼀套爬⾍程序,将某个第三⽅的爬⾍程序作为你程序的⼀部分,⾮常节省时间。
我们下⾯要做的就是写⼀段python爬⾍程序,来提交翻译请求。如果⽤get肯定是不⾏的,get将参数与url⼀起发给接收⽅。但是有道明显不是这么做的,在发请求前后url没有发⽣变化,说明他是通过post发送的请求。如图所⽰。
总结:按照需求,我们要⽤python来发送请求和接受结果,以此实现翻译功能,本程序的核⼼在与如何⽣成post请求表达(form),下⾯进⼀步分析。
2.post请求分析
我们的⽬的旨在分析在发送post请求时,浏览器到底封装了什么数据(表单数据),也就是data中究竟要装什么,才能伪装成浏览器向服务器端发送请求。下⾯我们来翻译进⾏⼀次翻译,如图,翻译后,进⼊控制台界⾯,点击⽹络,在XHR中到了请求表达,也就是说有道翻译是基于AJAX+JS发送请求的,查看此Ajax⽂件,我们看到了他的请求头:
下⾯我们⼀个个来分析请求头中的内容,以下是全部内容,是我对每个⽂本的解释,可能并不准确:
i很好理解,就是我们请求的对象(翻译对象),from谁发起的,to发给谁,smartresult直接返回,client客户端类型(这⾥是web浏览器),salt/ts/bv不详,doctype为json数据类型,版本2.1,keyfrom应该是key来⾃谁(这⾥是web浏览器),action动作⽴即执⾏。
i:我是⼀匹狼
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:15818489372401
sign:7c2431437f3312132086089fcbad13d0
ts:1581848937240
bv:bc250de095a39eeec212da07435b6924
doctype:json
version:2.1
random翻译keyfrom:fanyi.web
action:FY_BY_REALTlME
也就是说,我们只需要把这些东西丢到post请求的data中去,就可以模拟浏览器进⾏请求,但是问题来了,这些内容哪些是变化的哪些是不变的?当然第⼀个变化的肯定是i属性,也就是我们请求翻译的对象,我们还需要到其他变化的属性。我们再启动⼀个浏览器,打开
有道翻译,我这⾥是打开的⽕狐浏览器,并且进⾏了⼀次请求,如下图。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论