python爬取有道翻译

python爬虫爬取有道翻译教程

编写环境

为了宝宝们能够正确读懂本教程,在正式开始前,宝宝们需要搭建的环境如下:

  1. 连接互联网的win10电脑,(win7也可以)
  2. Google浏览器(版本无要求)
  3. Python(版本3就可以了),如果没有安装的小伙伴可以参考python安装以及版本检测
  4. requests库(版本没啥要求),没有安装的小伙伴可以参考python request库安装

需求分析

我们本次要爬取的网页是:有道翻译
在这里插入图片描述
这时,按下F12键,调出Google浏览器的开发者工具
在这里插入图片描述
现在里面没有内容,别慌,点击NetWork选项卡后,再次点击翻译按钮
在这里插入图片描述
这时,宝宝们会发现下面多了几条网络请求,我们点击第一个请求
在这里插入图片描述
在右边有三个点的按钮,可以切换开发者工具的显示状态,我们点击第一个,让它单独分出一页显示出来,以便于观察
在这里插入图片描述
在Headers选项卡中,可以查看这次请求的URL、headers参数
在这里插入图片描述
往下面翻,还有data的参数值
在这里插入图片描述
我们点击Response来查看这次请求的响应,也就是服务器给我们返回的结果,经过和网页中翻译内容的比较,可以确定,这个数据就是我们需要爬取的内容.
在这里插入图片描述
经过我们的多次改变翻译内容,比较请求信息,我们可以发现:

在data中有三个数据是加密的变量,其中i为我们输入要翻译的字符串,而salt、sign和ts是加密的变值.所以我们猜测这个值是由JavaScript生成的,这里我们可以在页面中右键->查看网页源代码
通过Ctrl+F搜索js,找到js文件
在这里插入图片描述
通过向下继续搜索,我们发现了三个以js结尾的文件
在这里插入图片描述
依次点击进入后进行搜索,最终确为
http://shared.ydstatic.com/fanyi/newweb/v1.0.18/scripts/newweb/fanyi.min.js
是进行加密的JavaScript文件
在这里插入图片描述
我们将这个JavaScript文件,按下Ctrl+A全选,Ctrl+C进行复制,但是这个代码是压缩格式,不利于我们的阅读
这里小编给给大家提供了一个js格式化的网站在线代码格式化
粘贴进来后,即可复制格式化好的代码
在这里插入图片描述
下面在PyCharm中新建一个js文件,将格式化好的js代码粘贴进来,PyCharm的安装可以参考PyCharm的安装以及破解

将代码粘贴进来后,按下Ctrl+F可以在代码中进行搜索,输入salt,逐个查看比对
在这里插入图片描述
但是通过我们的观察,浏览器中的data参数,版本是2.1
在这里插入图片描述
说明我们找的不对,继续向下搜索,只到查找到version : 2.1,这里的salt即为data中的参数
在这里插入图片描述
我们发现salt、sign和ts都的r的属性,下面我们搜索一下r是如何定义的
通过搜索,我们找到了这里
在这里插入图片描述
根据代码可以看出:

r = "" + (new Date).getTime()

所以ts就是当前的时间戳(这里要注意:JavaScript中的时间是以毫秒为单位的,所以在下面我们生成的时候注意单位的换算)

i = r + parseInt(10 * Math.random(), 10);

salt即为r加上一个在0-10之间的随机数

sign: n.md5("fanyideskweb" + e + i + "97_3(jkMYg@T[KZQmqjTK")

sign为对两个字符串加上e和i拼接的md5加密
其中i即为salt
在这里插入图片描述
而e经过上面的代码,我们可以确定为输入的字符串
到这里我们就将需要的加密字符确定好了

实战代码

在PyCharm中新建一个项目,建立一个py文件
在正式写代码之前,我们可以在程序前加上

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by 秋叶夏风

第一行 指出python解释器位置,不知道的小伙伴可以参考#!/usr/bin/python 作用
第二行 # -- coding:utf-8 --的意思时指点该程序使用的utf-8编码,这个utf-8编码是干啥的呢?可以参考-- coding: utf-8 --的作用
(づ ̄ 3 ̄)づ皮一下,很开心。
第三行不是必须要写的,可以省略。。。。

导入requests模块,代码如下

import requests

将Request URL复制过来

url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

将要翻译的字符输入进来

e = input('please input:')

下面构建请求需要的data
首先要构建的是ts,导入python中的时间模块

import time

生成当前的时间戳

sjc = time.time()

转换类型和进制

ts = str(int(sjc*1000))

下面构建salt
导入random模块,

import random

生成随机数并转换类型和进制

salt = ts + str(int(random.random()*10))

接下来是构建sign,需要用到python中的hashlib库来进行md5的加密,代码如下
导入模块

import hashlib

拼接字符串

con = "fanyideskweb" + e + salt + "97_3(jkMYg@T[KZQmqjTK"

md5加密

sign = hashlib.md5(con.encode(encoding='UTF-8')).hexdigest()

复制data中的内容
在这里插入图片描述
在PyCharm中粘贴后按下Ctrl+R可以进行替换,需要勾选Regex(正则表达式匹配模式)
在这里插入图片描述
匹配的正则表达式代码如下:

^(.*): (.*)'$1':'$2',

匹配好后,将i、salt、sign和ts替换成前面生成的变量

data = {'i': e,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'ts': ts,'bv': '9c4fffad2fb69d08cd130e408e0f8108','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'
}

构建headers,这里给出了三个必要的参数,不确定的小伙伴可以将请求头中的Request Headers全部复制过来也行

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Referer': 'http://fanyi.youdao.com/','Cookie': 'OUTFOX_SEARCH_USER_ID=-1154806696@10.168.8.76; OUTFOX_SEARCH_USER_ID_NCOO=1227534676.2988937; JSESSIONID=aaa7LDLdy4Wbh9ECJb_Vw; ___rl__test__cookies=1563334957868'
}

发出请求

res = requests.post(url,data=data,headers=header).text

用正则进行匹配翻译的内容
导入re模块

import re

开始匹配

rep = re.findall('"tgt":"(.*?)"',res,re.S)[0]

输出匹配的内容

print(rep)

经过封装,完整代码如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by  秋叶夏风def get_data(e):'''构建data数据函数:param e: 输入要翻译的内容:return: 字典类型的data数据'''import timesjc = time.time()ts = str(int(sjc * 1000))import randomsalt = ts + str(int(random.random() * 10))import hashlibcon = "fanyideskweb" + e + salt + "97_3(jkMYg@T[KZQmqjTK"sign = hashlib.md5(con.encode(encoding='UTF-8')).hexdigest()data = {'i': e,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': salt,'sign': sign,'ts': ts,'bv': '9c4fffad2fb69d08cd130e408e0f8108','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}return datadef get_para(e):'''获取需要的参数:param e: 输入字符串:return:'''header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/\537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Cookie': 'OUTFOX_SEARCH_USER_ID=-1154806696@10.168.8.76; \OUTFOX_SEARCH_USER_ID_NCOO=1227534676.2988937; \JSESSIONID=aaa7LDLdy4Wbh9ECJb_Vw; ___rl__test__cookies=1563334957868','Referer': 'http://fanyi.youdao.com/'}return get_data(e),headerdef search(res):'''用于匹配响应的结果:param res::return:'''import remodel = '"tgt":"(.*?)"'rep = re.findall(model, res, re.S)rep = rep[0]return repdef main():import requestsurl = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'e = input('please input:')data = get_para(e)[0]header = get_para(e)[1]response = requests.post(url,data=data,headers=header).textresult = search(response)print(result)
if __name__ == '__main__':while True:main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PartitionMotionSearch()

Outline: 1、 CFG文件中有关多参考帧的相关选项 2、 多参考帧涉及到的数据结构和全局变量 3、 保存重建图像为参考帧 4、 编码一帧前,设置参考帧列表 5、 多参考帧的使用(即参考帧的选择策略问题) 6、 遗留问题 1、CFG文件中有关多参考…

bat 发送post请求_get post 请求

HTTP是一个基于TCP/IP来传递数据的通信协议。1.GET和POST请求的区别?a: GET/POST本质上都是TCP链接,GET传body和POST拼参数,理论上都是可行的。b: 实际上HTTP协议对URL长度是没有限制的;限制URL长度大多数是浏览器或者服务器的配置…

boltdb 学习和实践

golang boltdb的学习和实践 1. 安装 go get github.com/boltdb/bolt 2.创建和启动数据库 db, err : bolt.Open("my.db", 0600, nil) 其中open的第一个参数为路径,如果数据库不存在则会创建名为my.db的数据库, 第二个为文件操作,第三个参数是可…

mysql 日志_MySQL日志系统

MySQL日志系统MySQL有两个重要的日志系统,分别是 redo log (重做日志) 和 bin log (归档日志) 。这两种日志有以下三点不同。redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。redo log 是物理日志&am…

盛大游戏杯第十五届上海大学程序设计联赛暨上海金马五校赛

编程1小时,提交4小时 做这种比赛一定要选一个好OJ啊 黑白图像直方图 发布时间: 2017年7月8日 21:00 最后更新: 2017年7月8日 22:38 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个像素点或者是黑色的或者是白色的。黑色像素点…

Web开发介绍

Web开发介绍 一,认识一个网站 最早的软件都是运行在大型机上的,软件使用者通过“哑终端”登陆到大型机上去运行软件。 后来随着PC机的兴起,软件开始主要运行在桌面上,而数据库这样的软件运行在服务器端,这种Client/Server模式简…

Django简介以及安装

Django简介 1. 认识Django Django是一个高级的Python Web框架,它鼓励快速开发和清洁,务实的设计。由经验丰富的开发人员构建,它负责Web开发的许多麻烦,因此您可以专注于编写应用程序,而无需重新创建轮子。它是免费的…

python基础笔试面试题_python基础面试常见题

Python是目前市面上,我个人认为是最简洁、最优雅、最有前途、最全能的编程语言,没有之一。 2、通过什么途径学习的Python? 通过自学,包括网上查看一些视频,购买一些相关专业的书籍。 3、Python和Java、PHP、C、C#、C等…

django-rest-swagger显示接口备注内容

Swagger是一個API開發者的工具框架,用於生成、描述、調用和可視化RESTful風格的Web服務。總體目標是使客戶端和文件系統服務器以同樣的速度來更新,方法,參數和模型緊密集成到服務器端的代碼中,允許API始終保持同步。 在使用 djan…

安全和连接是IoT联网设备2大挑战

IoT正在推动500亿个联网设备在未来10年内从工业、零售、智能照明、智慧城市、汽车、农业、可穿戴设备、智能建筑、医疗市场涌现出来,ARM处理器部门市场营销总监Ian Smythe表示:“到2020年,消费电子和健康、智慧城市和物流、汽车和运输领域的I…

windows下部署免费ssl证书(letsencrypt)

随着网络的发展,网络安全也越来越重要,对于网站来说,从Http升级到https也是我们要做的首要事情。要实现https,首先我们需要申请一张SSL证书,这篇文章我主要介绍下边这几个方面: 1. SSL简单介绍 2. 免费Lete…

python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法

一般情况下,在调用函数时,使用的是位置参数,即是按照参数的位置来传值;关键字参数是按照定义函数传入的参数名称来传值的。那么,关键字参数怎么使用?工具/原料 python pycharm 截图工具 WPS 方法/步骤 1 打…

【SSL】HTTPS配置全过程

服务器配置https协议 HTTPS,是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 配置HTTPS就需要证书,关于证书方面不做过多解释,只…

输出四位完全平方数_完全平方数中的规律

PS:很近之前自己收集的资料一个正整数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数,也叫做平方数。如:0,1,4,9,16,25,36,49&#…

为企业提供本地销售人员的Universal Avenue获1000万美元A轮融资

为各类B2B企业提供本地销售人员的瑞典初创企业Universal Avenue近日获得了1000万美元的A轮融资。此轮融资由Eight Roads(富达国际的投资机构)领投,原有投资者Northzone和MOOR跟投,加上2015年获得的500万美元种子轮融资&#xff0c…

【Linux分享】Linux常用命令+教程分享

今天分享分为两部分 :) PART01 Linux常用命令分享/ PART02 关于BD面试经验分享 30mins Linux Command: PART 1 你本可以张口就来..... 本篇内容分享的宗旨: 拿下Linux面试 别面试的时候呆呆地说个ls了🚑 本篇分享详细地介绍了常用Linux指令的功能、语法、参…

万能无线鼠标对码软件_400元就能买ROG无线游戏鼠标,ROG影刃2无线版使用体验...

影刃2是ROG刚刚推出的一款新产品,定位入门游戏玩家。目前市面上定位入门游戏玩家的无线鼠标真不多,400块以内的预算想要选购一款合适的无线游戏鼠标,选择其实非常有限。 就ROG产品线而言,烈刃2的价格到了700块钱;罗技G…

wampserver 虚拟主机

转载:http://blog.csdn.net/knight_quan/article/details/51830683 1.背景: 在进行网站开发的时候,通常需要以http://localhost或者127.0.0.1等地址来访问本地环境的网站。不过随着开发项目的增多,需要每次先访问localhost然后再选…

PL/SQL的结构

2019独角兽企业重金招聘Python工程师标准>>> [DECLARE] --声明开始关键字/*这里是声明部分,包括PL/SQL中的变量、常量以及类型第等*/BEGIN --执行部分开始标志/*这里是执行部分,是整个PL/SQL块的主体部分,该部分必须存在,可以是SQL语句或流程控制语句等…

cf方框透视易语言代码怎么写_易语言真的那么不入流吗?

很多人鄙视易语言,为什么那么多人一提易语言,除了骂,还是骂,易语言很大错误吗?知乎上的大神们是这么说的一个语言的“入流”,和是不是英文关键字无关,而是和这种语言进入某一子行业的契机有关。…