|
之前突发奇想,想尝试一下写一写FME在网络爬虫发面的东西,写一个小的系列。这算是一个比较大的挑战吧。因为这部分的应用可能很大一部分知识点可能并不在FME上,如何去平衡网络知识与FME交汇的地方,是一个比较大的问题。并且很多方面我也是初学者,中间难免会有一些错误,请大家多多包涵。
首先我们需要知道,网络数据获取必须有以下流程:
1.找到数据的入口页。
2.发送网络请求,获取响应。
3.提取数据。
一、发送get请求
对于不同的网站下,数据入口不尽相同,因此本文也不做过多的介绍,主要介绍的HTTPCaller转换器发送网络请求。
网络爬虫,最典型的特征的是模拟浏览器,向服务器发送请求,并获取数据。
打开浏览器,百度搜索fme,浏览器会返回一堆搜送分结果,这就是浏览器发送的数据请求。
查看网址,我们可以看到如下参数:
https://www.baidu.com/s?ie=utf-8 ... amp;rsv_sug4=443782
以”?”之前为请求接口,即是我们请求的数据入口;后面“键=值”形式的参数,多个参数之间以“&”隔开。
这其中有很大一部分是时间戳之类的不必要的数据,尝试着在网址栏去掉不必要的参数,看网页是否还能返回我们需要的结果,我们获得了:
https://www.baidu.com/s? wd=fme
使用HTTPCaller转换器,设置请求模式为get,Request URL为https://www.baidu.com/s? wd=fme,运行模板。
会发现网络请求虽然已经发送成功,但是返回的并不是我们预期的结果。
这是因为网站服务器会判断访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。
那么,怎么去模拟浏览器发送而网络请求呢?
Request Headers就是告诉服务器,就是描述怎么数据请求的。
打开谷歌调试工具,在network栏下寻找到,寻找到对应的请求接口的Request Headers。
User-Agent就是告诉网站服务器会判断访问者是通过什么工具来请求的,一般情况下,只需要设置User-Agent参数,即可突破大多数没有网站的限制。如果还有问题,则将上述的属性依次填写到Request Headers中,尽量详细的去模拟浏览器。
给刚才的HTTPCaller转换器的Request Headers加上User-Agent,再次请求。
查看返回结果,可以看到我们已经获得了正确的响应结果。
二、发送post请求及其他参数的设置
好了,简单的GET请求,发送已经完成,后面让我们看一下,需要发送post请求以及传递其他参数的情况。
发送post请求其实跟get没多大区别。一般情况下建议在Request Headers中设置Content-Type属性,以便于告诉服务器,是以哪一种形式传递的参数。
以百度翻译为例,打开开发者模式,以手机模式,然后刷新浏览器。在下图处可以看到手机版的翻译接口(之所以使用手机版,是因为一般手机版更简洁一些,干扰信息更少)
下拉菜单,找到发送的参数,
仔细观察,query和from、to的指向是很明显的,但是token和sign我们并不知道是什么。
在经过不断地调整和测试之后,发现Request Headers里面的Cookie,和请求参数sign及token三个参数必须的。
并且其中Cookie和token可以暂时将其看作是固定的,但是sign一直在变动的。这就意味着我除非能够找到计算sign值的方法,否则这个接口也没法使用。
嗯,这就是听起来蛮高大上的反爬与反反爬。
中间的罗嗦话略过不说,因为我们只是介绍如何发送网络请求,给大家对网络爬虫有一个大概的概念。直接放结论,通过百度我百度到了如何破解百度翻译的反扒手段,一段js加密代码。每次进行请求的sign值,都是根据这段JS代码将翻译内容“query”进行计算后动态生成的。
如何使用这段加密js代码?这里推荐一个已经被FME弃用的转换器JavaScriptCaller,目前可以从2018版本上可以正常使用,在2019之后的版本上就已经不再提供,不过可以将其复制到2019里使用,2020版本我尚未进行测试。
之所以弃用,官方给的说法是使用“JavaScriptCaller实现逻辑的过程介绍可见性很低,因此相较于Workbench中的内置转换器,维护会更困难。同等情况下,推荐用PythonCaller。”
个人觉得还是挺可惜的,因为它可以在FME中无障碍地运行js代码,在遇到上述的反扒措施时,这就是一杠利器!
将sing的解密js代码复制到JavaScriptCaller中,获取最终的sing值。
好了,加密的sign值也计算完成了,可以愉快地使用这个接口进行翻译了……吗?
其实不然,我们并没有解决token和Cookie的问题,我们所写的模板,还是很容易被服务器识别为爬虫程序。
当然本篇文章只是讲解基本发送网络请求与FME相结合的知识做一个简单的介绍,并不针对反爬与反反爬做讲解,根本原因是我也不会。
下一次,可能会从数据获取方面,开始讲几个转换器的应用吧。
点击下方链接获取模板。提取码:2021
https://pan.baidu.com/s/110tUx0sMjkUrIBAvgprqDA#list/path=%2F
————————————————
版权声明:本文为CSDN博主「fmechina」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fmechina/article/details/116233682
|
|