龙空技术网

Python3 爬虫实战

痴呆程序猿 295

前言:

如今朋友们对“js爬虫跨域”大概比较关注,咱们都需要了解一些“js爬虫跨域”的相关内容。那么小编在网摘上汇集了一些对于“js爬虫跨域””的相关知识,希望各位老铁们能喜欢,看官们一起来了解一下吧!

背景

媳妇说考试这个题库不方便作弊无法查找,需要把题库全部弄下来,然后可检索。。

过程想办法查看网页源码

PC微信很快就打开了网页。思考如此,直接谷歌浏览器打开网页即可··然后在浏览器直接查看网页源码,看network。。

现实狠狠的打了一记耳光。

无奈只能抓包。。

WireShark的邂逅

网上查找抓包软件,大名鼎鼎的WireShark 映入眼帘,下载安装WireShark,过程很顺利。激动万分打开WireShark,复杂的界面,操作不知所措。。

这么多网络连接,不知所措,大胆猜测,估计是得挑个我上网的网卡名称。一阵猛烈猜测过后尽然每个网卡上都有数据

点了个WLAN,只有这个是物理无限网卡连接着的,应该不会错。。

点击进入后:

不停的刷,这个似乎无法分析问题,得去查看如何写过滤器,本次要过滤的是http协议。经过百度,查到一篇http协议宝典

瞬间少了很多无用的数据包。。。然后再次从微信浏览器里面发起,请求,精准得到ip地址,然后再在过滤器上加入服务器ip。

很精准的得到过滤请求。经过此过滤,竟然只能看到http的 reques 无法看到response,这WireShark着实头大啊,再次求助度娘。。

纵观抓包PostMan验证分析结论

很好,此类微信公众号中的页面,基本都已舍弃jsp,前后分离了,两个接口历历在目,直接过滤在了Wire Shark上。 一个目录接口,显示目录和章节,还有个题目详情接口。

返回格式如下:

接口1:

;start=0&limit=150&ebid=401&token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiI1MDMxMzMzMDA2NTAwODY0In0.hnKUbEs6Zp_etp6dbTSJp5HPHAlOq7gCOLKcekm65MfMA5fI_WTTlYRdOq0nf2xypyCGUA4T38zE8tIkfggEPQ

验证估计在url上,不需要加任何http头,直接可访问。

接口2:

;pageSize=0&questionNo=000079001001000005

url参数上很容易看到同第一个列表上返回回来的参数温和,partNo为章节,questionNo为递增题目编号,但是看着似乎有点眉目,凡是还需要验证,同时为代码做准备。

下一步 postman验证 如何构造接口2请求。

WireShark中把所有请求头都贴到请求头中去。

如此一大串,全部贴入postman中测试

当全加上的时候,竟然请求不到数据,然后尝试去掉部分,当把cookie去掉的时候,直接能够返回数据了,然后开始减少到最少,最终留下Authorization,Host。

经过几次测试发现构造第二个请求以下规律

;pageSize=0&questionNo=

第一次questionNo不给值,返回第一条,然后再返回的结果中,直接采用nextQuestionNo,总数为第一个接口里面返回的total。至此完事具备,只待码代码。

思考采用何种语言

日常开发过程中,采用了最多的为C++,JS,这两种语言,C++虽然所有工具类都具备,总觉得用来抓包遭嫌弃,写的虽然很快,但是到调试的时候,可能让我崩溃。 JS,这个语言要写,还得要用nodejs,还要加文件模块,还要弄代理服务解决跨域问题,麻烦。。 然后剩下C#,Java,这语言虽然好,便捷方便,但是也觉得还是得编译运行。想到了Python了,这个曾经曾经曾经看过,写过点例子的语言,现在都不知道发展到python几版本了,但是这个确实用来写爬虫的最快语言,没得挑了。。

随便找个python3版本,安装配好环境变量,打开vscode,直接撸··

第一步求助度娘,找到python3 http client 示例

直接拷贝成我的fuck.py文件,新增一个testFuck方法修改拷贝getDemo方法。

按照示例,直接敲入http头,以及第一个请求地址。

网络请求返回编码问题

额,遇到了第一个问题,这个不是gbk估计就是utf-8了,也没啥好问度娘的,直接尝试修改为utf-8。果不其然,成功打印了。

Json字符串python对象问题

首战告捷,下一步,解析返回内容,现在转成了字符串,需要把字符串转成python3中字典对象,百度python中采用什么方法转换字典

eval,尝试下

额,无尽的思考,难道python的字典没有true和false··· 对于python着实不熟悉,发起灵魂拷问,难道python中json和字典不是一回事?直接百度 python3 json false 关键字,得到以下文章:

经过几秒浏览,习得json.loads 大法

立马尝试修改代码:

成功输出。。

python3 基本语法学习

数组遍历写法, 简单的for(int i=0;i<10;i++) python中写法。。

请求返回异常问题考虑

Python try catch 异常模块,由于当前采用的为我微信的认证,所以访问到第六个问题的时候,直接回返回code 4010,让后购买章节。所以遇到此类异常,需要跳出访问。 异常模块经过度娘习得:

请求报错远程服务器主动关闭连接

经过多次请求后,返回远程服务器主动关闭错误,经过思考,http为短链接,conn = http.client.HTTPConnection(";, timeout=10)后一直使用 conn,http头中,未加入keep-alive 标识,修改代码。

运行,成功读到五个问题,返回告诉我需要购买章节,异常捕获。

PC微信重新登陆媳妇微信

登陆媳妇微信,重新抓包,查看授权字符串。发现坑爹惊天微信大bug,我登入我媳妇微信后,还是无法查看其他章节,发现授权码还是我之前的,这是什么逆天bug。无奈,百般重试,依旧如此。然后查找微信任何删除缓存,清空缓存的功能,未果。。最终无奈,卸载重装,搞定。。

最后写入文件

查找python3写文件方法。

修改代码如下:

暗中窃喜,大功告成,运行。帅不过十秒···

这个错误,乍一看还是和编码相关,思考半天,最后就添加了文件写入,文件写入采用windows默认编码,windows默认编码为gbk,似乎这边没错,这错误好像是gbk特殊字符无法编码,我瞅瞅是什么特殊字符,似乎就是这个Fe²⁺ 捣鬼。那文件打开理论上是应该能指定编码,换成万能utf-8应该就没问题。继续度娘,关键字,python3 写文件 指定编码,

,修改代码。

至此文件成功输出···

成果

标签: #js爬虫跨域