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

之前突发奇想,想尝试一下写一写FME在网络爬虫发面的东西,写一个小的系列。这算是一个比较大的挑战吧。因为这部分的应用可能很大一部分知识点可能并不在FME上,如何去平衡网络知识与FME交汇的地方,是一个比较大的问题。并且很多方面我也是初学者,中间难免会有一些错误,请大家多多包涵。

首先我们需要知道,网络数据获取必须有以下流程:

1.找到数据的入口页。

2.发送网络请求,获取响应。

3.提取数据。

 

一、发送get请求

对于不同的网站下,数据入口不尽相同,因此本文也不做过多的介绍,主要介绍的HTTPCaller转换器发送网络请求。

网络爬虫,最典型的特征的是模拟浏览器,向服务器发送请求,并获取数据。

打开浏览器,百度搜索fme,浏览器会返回一堆搜送分结果,这就是浏览器发送的数据请求。

查看网址,我们可以看到如下参数:

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=fme&oq=Parasolid&rsv_pq=8b7c056a00044b6a&rsv_t=a038Cg0zwpzBnm0RqUhTeouJvRbrO%2F7S0SXZMvFJNrUWa4LFXTG8vitXm%2Fg&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=4&rsv_sug1=4&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=1038&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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值