经验贴】用最土的手法,最高调的绕过反爬

网友投稿 582 2022-05-30

@[toc]

缘起

哈喽大家好,我是“看,未来”,好久不见。或者说,好久不爬了。

但是今晚,重出江湖,“血雨腥风”不至于,拿了数据我就走。

这不要考试了嘛,想着拿一下平时的选择题来过一遍,加深一下印象。奈何那选择题都是被选过的了,答案的痕迹很明显,又不让复制粘贴。

简单的说呢,目标是这样的:

那你说这样的试题做起来有什么意思,难道我要说:“看不到看不到,我看不到答案”,骗谁呢。

而且吧,我这人有个癖好,我要打印出来看呐。

但是吧,题目可以直接复制,选项不让复制,这给我着急的啊。

第一次尝试:咱毕竟是懂技术的人,干的活儿那怎么能没有技术含量?

是吧,咱如果只会截图,提取文字,那和没学过爬虫的小白有什么两样?

我们有一个老师,给我们的题目都是纯英文的,每次做完还要我们从头到尾翻译一遍交上去。

没点技术,真得去把英语学得很六啊,不然百度翻译都麻烦?

【经验贴】用最土的手法,最高调的绕过反爬

于是我果断打开了网页源代码,这时候我可以介绍一下这套题目的规模了:

总共六套试题,平均每套试题有32道题目,这就是近200道题了,每道题有四个选项,个别多选题有五个。

也就是说,我如果用手去复制粘贴,要复制粘贴各1000下。

这事儿我能干吗?我复制粘贴了100下就果断放弃了,这事儿我干不了!!!

第二次尝试:算了,什么技术部技术的,土办法来吧

于是,我开始用截图。。。

是的,我又一次屈服了。。。

但是,就算截图,我也要与众不同,我长截图!!!

一套试卷我直接一张图分四段截下来,一段8题。到打印的时候,我成功的发现,打印出来,那字得用显微镜去看,可惜我暂时买不起。

于是,这条路又失败了。

第三次尝试:失败了?不,只是没调好参而已啦,再干!!!

缓了缓神儿,去考了场试回来,我深思熟路。

字太小,是不是我一次截太多题目了,那我一次截4题?

说干就干,吭哧坑次一小时又过去了,再打印,好家伙,字虽然小,终于可以看了,就是淡了点。

诶,不对,这答案怎么明显比较深色啊。

完了,又白干了。。。

于是我跟身边的好兄弟抱怨了一下:这复制粘贴简直要命。

他说:你可以花一个晚上。

我说:你开什么玩笑?这是一晚上能解决的事情?

他说:我的意思是,牺牲你睡觉的一晚上,弄完发我一份儿,我替你睡觉。

我当时锤爆他的心都有了,还是嘴硬:算了算了,我去爬吧。

第四场:给老子爬!!!

我想,要不我去把网页源码复制下来吧。

好家伙,复制不了。

看都不用看,这种要登录的,不交账号密码去post,根本不可能给你requests到源码的。

当时,post吧,又是加密过的。。。

你说怎么po?

我本来对post也不熟。

于是我就想转json包,发现包里的网址也上不去。

很无奈。

重头戏来了,前面讲了那么多废话,重头戏来了

经验一:

将鼠标放在数据上方,左击,有两个选项,选第一个:“copy value”,可以复制该作用域下数据。我选择的是“data”

就算json的网址无法打开(因为要登录),我们也可以通过这种方式来获取json的内部数据!!!

复制下来之后呢,放在txt文件里面,拖到浏览器打开浏览。

经验二:

这里我全程推荐用谷歌浏览器,Chrome。别问我为什么,以前讲过很多遍了。

经验三:

对于这种有很多双引号和单引号在内的数据,用三引号包起来。

但是,直接包是不行的,直接包,type是srt,但是转不了json。

会报这个错:“json.decoder.JSONDecodeError: Expecting ‘,‘ delimiter: line xx column xx (char xxx)”

问题原因:

将字符串作为字符串文字复制粘贴到Python源代码中,出现错误。

解决办法:

在这种情况下,\n被解释为单个字符(换行符)。您可以通过使用原始字符串文本来修复它(r’’,使用三引号r’’’…’’'以避免在字符串文本中转义""引号)

经验四:

Python3报错:Non-UTF-8 code starting with '\xe7’的错误

咱也不知道为啥,就是第一次可以,后面换了个字符串就行了,很迷。仔细比对了两个json字符串,没有什么区别啊。

Python3默认使用utf-8的编码格式,如果出现Non-UTF-8 code starting with '\xe7’的错误,可以在程序的==最顶部==加上 # -- coding:utf-8 --即可。

放码过来

不好意思啊,我这个写的比较土一点,短短几行,写不出很长的代码来,见谅见谅。

def get_value(score): ''' 从json类型字符串提取目标标签下数据 :param score: 目标字符串 :return: null ''' json_js = json.loads(score) for data in json_js['lists']: print(data['title']) print("answer: " + data['answer']) for option in data['options']: print(option['id'] + ": " + option['title']) print('-------------')

不要诧异为什么只是print,没有写入文件。

不要问,问就是懒得写,我直接cv到word里不好吗?

结语

代码不是重点,重点是这个思路。==不管方法有多土,只要简单,且最快的实现目标,就行了==,没人管我土不土,他们只要我的文档。

也有朋友知道后跟我说:你为什么不用selenium呢?或者直接将网页源码离线保存下来?

首先,selenium不比这个好写,而且,还慢。其实就是不好写。

网页源码离线保存,我试过了,到时候还要正则,再排版,在输入到文档中,更麻烦。

我的好朋友曾给我看过一个笑话,在他看来是笑话,但是却引起了我的深思,我分享给大家吧。

有个不大的公司,遭遇一个黑客勒索,黑客说,一天不交赎金,就按时给公司断电。然后,他做到了。公司老板很着急啊,就开始让技术部门排查,查了很久查不出来,又斥重金去外面请了安全专家来排查,还是没查出来。后来,偶然有一次,被发现黑客花了点钱买通了公司里的一个老大爷,老大爷每天按时去拉电闸。。。

批复是:真正厉害的手法,往往是最原始的。。。

一千个读者有一千个哈姆雷特吧,我还是忘不了那天中午,老师让我打开了淘宝,一块钱买了我一周的努力,这就是方法论,方向论,解决问题的路子要广,要野,思路要打开,怎么稳,怎么简单,怎么来。

JSON 数据结构

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CAF:c++ actor framework
下一篇:为什么在MySQL中不建议使用UTF-8
相关文章