免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1046|回复: 6
收起左侧

FME在网络数据获取方面的应用——发送网络请求

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-10-25 15:37 | 显示全部楼层 |阅读模式
之前突发奇想,想尝试一下写一写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

0

主题

4387

铜板

3

好友

至尊VIP

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

积分
214
发表于 2021-11-5 10:27 | 显示全部楼层
谢谢提供分享!
回复 支持 反对

使用道具 举报

0

主题

2万

铜板

1

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4862
发表于 2021-11-7 20:59 | 显示全部楼层
谢谢分享、学习一下。
回复 支持 反对

使用道具 举报

0

主题

4万

铜板

10

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6458
发表于 2021-12-6 14:57 | 显示全部楼层
谢谢分享
回复

使用道具 举报

1

主题

1万

铜板

2

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
5191
发表于 2022-12-31 17:30 | 显示全部楼层
感谢分享
回复

使用道具 举报

2

主题

1万

铜板

7

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
6401
发表于 2023-1-6 15:46 | 显示全部楼层
没事来逛逛
回复 支持 反对

使用道具 举报

3

主题

2850

铜板

1

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1164
发表于 2023-3-20 09:43 | 显示全部楼层
谢谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表