基本爬虫爬取有道翻译

对于我这个爬虫新手,今天要记录一篇在学习爬虫中的一个小实例,尝试用爬虫爬取有道翻译
在写爬虫之前,我们先要打开有道翻译,看一看在翻译的过程中我们的电脑发出了怎样的请求,是对于那个网址发出的,以及电脑收到的response在那个地方,我们先打开有道翻译,打开控制台进行抓包,看到如下画面
基本爬虫爬取有道翻译_第1张图片
我们看到一共发送了五个请求,而我们所需要的翻译结果在第一个请求中,我们要求翻译的内容是“人生苦短,我用python”,在这个请求的preview中,可以看到翻译的结果。
那这个请求对应的url就是写爬虫所需要的url,找到这个请求的url,是

“Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule”

如果我们直接使用这个url,会发现爬取过程中出现了问题,上网查询后,发现有道翻译有反爬机制,需要把url中的“_o”去掉,就可以正常使用
下来要找到我们输入的内容放在哪里了,在控制台中看到,我们输入的“人生苦短,我用python”在From Data中的“i”中储存,同时在From Data中还有一个重要的参数,json,它代表了数据的传输形式,没有这个参数也是没有办法正常爬取的,有了对应的材料,我们还需要user agent,简单来说,就是我们电脑的名字,让服务器知道是谁向他请求了数据,在Headers中找到我们电脑的名字信息,在程序中将上面的所有信息写成字典的形式,再加上正确的url,就可以开始写程序了

import requests
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
string = {
            "i":"人生苦短,我用python",
            "doctype":"json"
            }#请求体
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3706.400 SLBrowser/10.0.4040.400"}
response = requests.post(url, headers = headers,data = string)  #电脑发送的是post请求

print(response.content.decode())
print(type(response.content.decode()))#是字符串类型,不是字典类型

运行结果如下

{“type”:“ZH_CN2EN”,“errorCode”:0,“elapsedTime”:2,“translateResult”:[[{“src”:“人生苦短,我用python”,“tgt”:“Life is too short, I use python”}]]}

在程序的运行结果中,发现返回的结果有些像字典类型,但是用type()函数打印它的类型会发现,他是字符串类型,这很不便于我们优化处理,所以我们像将他转换成字典类型
需要 import json,再加上如下代码

dict_ret = json.loads(response.content.decode())
print(type(dict_ret))

刚刚上面提到了json,其实json是一种类似python的数据类型,主要用于文件之间信息的传输,写入,python也有一套针对json格式的处理办法,
代码中的函数就是把对应的json字符串转换为字典类型,之后我们就可以按照字典的处理方法,提取需要的信息,比如翻译结果

trans_result = dict_ret["translateResult"][0][0]["tgt"]
print("翻译结果是:",trans_result)

这算是对我们的代码进行的一点点优化,同样我们也可以在代码的最先面写上要求翻译的内容,同时修改一点代码

import requests
import json
trans = input("请输入翻译的内容:")#输入对应内容
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
#response = requests.get(url)#发送get请求
string = {
            "i":trans,#需要翻译的内容
            "doctype":"json"
            }#请求体
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3706.400 SLBrowser/10.0.4040.400"}
response = requests.post(url, headers = headers,data = string)  #发送post请求,并且需要带上对应的参数
dict_ret = json.loads(response.content.decode())
trans_result = dict_ret["translateResult"][0][0]["tgt"]
print("翻译结果是:",trans_result)

这样代码就有了人机交互的方法,也会更加好看,
这是我学习爬虫的一点总结,我应该会在更新几篇的吧。。应该
删除线格式
溜了溜了~~

你可能感兴趣的:(基本爬虫爬取有道翻译)