python爬虫学习之路(2) 利用urllib爬取有道翻译的结果

爬虫小程序 - 单词量测试 1.代码 import requests link = requests.get('https://www.shanbay.com/api/v1/vocabtest/category/') #先用requests下载链接。 js_link = link.json() #解析下载得到的内容。 bianhao = int(input('''请输入你选择的词库编号,按Enter确认 1,GMAT 2... 阅读详情

上一节学习了如何简单的获取一个网站的html代码,这次学习一下如何爬取一个网站返回的数据.比如:爬取有道翻译所翻译的结果.
在我们爬取有道翻译的结果前,我们需要将我们所要翻译的中文传到有道翻译的服务端,如何传送呢?这就需要用到 urlopen的data参数 .

urlopen的data参数



我们可以使用data参数,向服务器发送数据。根据HTTP规范,GET用于信息获取,POST是向服务器提交数据的一种请求,再换句话说:
从客户端向服务器提交数据使用POST;
从服务器获得数据到客户端使用GET(GET也可以提交,暂不考虑)。
如果没有设置urlopen()函数的data参数,HTTP请求采用GET方式,也就是我们从服务器获取信息,如果我们设置data参数,HTTP请求采用POST方式,也就是我们向服务器传递数据。
data参数有自己的格式,它是一个基于application/x-www.form-urlencoded的格式,具体格式我们不用了解, 因为我们可以使用urllib.parse.urlencode()函数将字符串自动转换成上面所说的格式。


下面让我们来尝试爬取一下有道翻译的网站:

1,首先打开有道翻译的网站:http://fanyi.youdao.com/
这里写图片描述
2, 打开调试页面:
这里写图片描述
3, 点击”Network”
这里写图片描述
4, 输入要翻译的中文,’你好世界’
这里写图片描述
可以看到调试栏多了一行东西,点击它.
5, 查看网站返回的结果

这里写图片描述

6, 查看它所传送的信息

这里写图片描述

从General中,我们可以找到有道翻译获取翻译结果的网址,所以我们需要访问这个网址,并获取翻译结果.上面已经说过了,我们不可以直接访问这个网址,还需要用data传送一些信息给有道翻译,让它知道我们要翻译的中文,现在我们需要知道有道翻译传到后台的data有什么内容.
7, 查看data
把刚才打开的’Headers’拉倒最后,就可以看见data里的内容:
这里写图片描述

8,编写一个爬虫


from urllib import request
from urllib import parse
import json
if name == “main“:
# 要访问的网站url
url = “http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule”
# 翻译的内容
translate = “你好世界”
# 将刚才网站获取的data存储在字典中
data = {}
data[“i”] = translate
data[“from”] = “AUTO”
data[“to”] = “AUTO”
data[“smartresult”] = “dict”
data[“client”] = “fanyideskweb”
data[“doctype”] = “json”
data[“version”] = “2.1”
data[“keyfrom”] = “fanyi.web”
data[“action”] = “FY_BY_REALTIME”
data[“typoResult”] = “false”
data[“salt”] = “1531479170173”
data[“sign”] = “41d6c46c8129965e4955dc9bff287de8”
# data参数有自己的格式,所以要将data使用urlencode方法转换标准格式
data = parse.urlencode(data).encode(‘utf-8’)
req = request.Request(url=url, data=data)
# 访问网站
response = request.urlopen(req)
# 获取结果
html = response.read().decode(“utf-8”)
# 将字符类型的html转换为字典
results = json.loads(html)
# 输出结果
print(results)


我们可以看一下返回来的结果
这里写图片描述
我们可以看到返回来的结果是一个字典,但不是我们所需要的字典,这是为什么呢?
这是因为有道翻译有着反爬机制,它会对data里的一些值进行加密,所以我们用与刚才相同的data是不可以爬取的,那么我们要怎么破解有道翻译的反爬机制呢?

破解有道翻译的反爬机制

1, 找到data中哪些数据是变化的,被加密的.
我们现在看看进行第二次翻译时data数据:
这里写图片描述
与上一次所获取的data的数据进行比较,我们可以看出,其实只有’salt’和’sign’两个属性的值发送了改变,其他并没有改变.那么现在我们需要找到这两个数据是如何来的.
2, 查找salt和sign是如何变化的
salt和sign会变化的可能性有两种:一种是:有道翻译在翻译中文前,先向服务器发送一个请求,并从服务器获取这两个值.一种是:利用js在本地生成.那么是哪种方法呢?我们来看看是哪种可能:
第一种可能需要向服务器发送请求,并返回两个值.所以我们要在’Network’中找到其他从服务器返回的内容,看看在其他请求中有没有这两个值:
这里写图片描述
我们查看五条数据,可以看出除了最后一个的内容不为空之外,其他都为空,所以可以判断不是第一种可能.
那么就是第二种可能咯,现在我们来找一下js是如何生成这两个数据的.
3, 找到js文件
这里写图片描述
复制这个网址,在其他标签打开.我们可以看到一个js文件,把这个文件的内容复制下来,打开站长工具:http://tool.chinaz.com/Tools/jsformat.aspx。把代码复制进去后,点击格式化,得到一个js文件:
这里写图片描述
把格式化后的代码复制到一个文本文档中.
4, 查找salt和sign的生成方法
在文档内查找’salt’,找到js是如何生成两个值:
这里写图片描述
我们可以看见salt的值是时间戳加上10以内的随机数,而sign则是字符串”’fanyideskweb’+要翻译的内容+salt+”ebSeFb%=XZ%T[KZ)c(sy!”进行md5加密后的值.
5, 重新写一个爬虫
还有在发送请求的时候,还要加上headers,headers的内如下:
这里写图片描述
但是,其实并不需要把所有内容都加到headers中,一般只需要:”User-Agent”,”Referer”,”Cookie”,这三个值就行了


from urllib import request
from urllib import parse
import json
import time
import random
from hashlib import md5

md5加密
def turn_md5(data):
md5_obj = md5()
md5_obj.update(data.encode(“utf-8”))
return md5_obj.hexdigest()

if name == ‘main‘:
# 要访问的网站url
url = “http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule”
# 翻译的内容
translate = ‘你好世界’
”’
获取salt和sign的值
salt 为当前时间的时间戳加上0-10的随机字符串
sign 为 四个字符串的加起来的md5的值
”’
salt = str(int(time.time()*1000) + random.randint(1, 10))
sign = turn_md5(“fanyideskweb” + translate + salt + “ebSeFb%=XZ%T[KZ)c(sy!”)
# 将刚才网站获取的data存储在字典中
data = {}
data[“i”] = translate
data[“from”] = “AUTO”
data[“to”] = “AUTO”
data[“smartresult”] = “dict”
data[“client”] = “fanyideskweb”
data[“doctype”] = “json”
data[“version”] = “2.1”
data[“keyfrom”] = “fanyi.web”
data[“action”] = “FY_BY_REALTIME”
data[“typoResult”] = “false”
data[“salt”] = salt
data[“sign”] = sign
# data参数有自己的格式,所以要将data使用urlencode方法转换标准格式
data = parse.urlencode(data).encode(‘utf-8’)
#
headers = {}
headers[“User-Agent”] = “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36”
headers[“Referer”] = “http://fanyi.youdao.com/”
headers[“Cookie”] = “OUTFOX_SEARCH_USER_ID=-948455480@10.169.0.83; ” \
“JSESSIONID=aaajvZPcjhFWbgtIBPuiw; ” \
“OUTFOX_SEARCH_USER_ID_NCOO=1148682548.6241577;” \
” fanyi-ad-id=41685; fanyi-ad-closed=1; ___rl__test__cookies=” + salt
req = request.Request(url=url, data=data, headers=headers)
# 访问网站
response = request.urlopen(req)
# 获取结果
html = response.read().decode(“utf-8”)
# 将字符类型的html转换为字典
results = json.loads(html)
print(results[“translateResult”][0][0][“tgt”])


现在我们终于成功的获取到有道翻译的返回结果:
这里写图片描述

python爬虫之使用urllib模块实现有道翻译功能 目标: 用python的urllib库实现有道翻译 导入需要的库,设置交互进行交互 import urllib.request import urllib.parse import json # 请输入你要翻译的内容 key = input('请输入您要翻译的内容:') 分析网页,由于网页为动态网页所以从Network中寻找,找出结果如下: 于是确定好data # 把提交的form表单的数据转换为bytes类型的数据 data = { 'i': key, 'from': 'AUTO 阅读详情

相关推荐

Python3 网络爬虫——爬取简单的网页

本篇博客主要用于学习交流,用来记录自己学习过程中遇到的问题,所获得的感想,同时也为了方便以后的查找与回顾。另外也为了向各位前辈学习,纠正自己思考上的不足。文中可能会引用其他前辈的博客,文末会给出相应链接,侵删! 前言 自己一直想了解一些爬虫的知识及进行应用,从网上学习了一些前辈们的爬虫方法,用Python 3.6实现了简单的应用,爬取了百度翻译、有道翻译、谷歌翻译的页面。 1、爬...

Mr.Yu的博客 5925

使用urllib2库实现有道翻译

有道翻译的提交方式是POST,请求内容在form表单里,基本思路就是针对POST请求的普通爬虫,模拟表单的发送,然后问题出现了,{“errorCode”:50}。我记得一年前是可以用这样的思路解决的,结果现在不行了,看来是有道翻译的爬虫机制加了点什么,使用抓包工具抓取多次form表单,对比发现有两个值是变化的 salt sign 这两个是什么东西,一般这种能在页面直接变化的东西都是用J...

一人在山旁 382

利用Python爬取翻译网站的翻译功能

现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码。 首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/ 咱们用Python中的urllib模块的功能进行爬取 众所周知,在爬虫的准备工作中我呢吧需要确定咱们爬取网站的url 那么,这个翻译网站的url如何确定呢? 我们进入网站,并单击F12打开开发者工具(这里我们用的谷歌浏览器) 这个网站的翻译功...

weixin_43808690的博客 5846

使用Urllib2制作有道翻译器

       今天是学习爬虫的第二天了,看了网上很多初学者都喜欢爬取字典翻译。确实,有一个自己随时随地使用的翻译神器,省去了打开浏览器输入网址的那些繁琐,也腾出了不少时间。在这里我选择的是有道翻译,相比于百度翻译来说,它的特点就是使用了post请求来获取json格式数据,而百度翻译使用的是get请求。因为博主暂时还处于爬虫的入门阶段,而网上的入门资料和图书馆借阅的书籍还是python2相对多一些,...

jack_970124的博客 356

精通 Python 网络爬虫:核心技术、框架与项目实战

内容简介 本书从技术、工具与实战3个维度讲解了 Python 网络爬虫: 技术维度:详细讲解了 Python 网络爬虫实现的核心技术,包括网络爬虫的工作原理、如何用 urllib 库编写网络爬虫、爬虫的异常处理、正则表达式、爬虫中 Cookie 的使用、爬虫的浏览器伪装技术、定向爬取技术、反爬虫技术,以及如何自己动手编写网络爬虫; 工具维度:以流行的 Python 网络爬虫框架 Scrapy 为...

GitChat 7522

别再为OpenBCI_GUI安装发愁了!保姆级教程带你从Processing配置到成功运行(附常见错误解决)

本文提供了一份详细的OpenBCI_GUI安装教程,涵盖从Processing配置到成功运行的全过程,特别针对常见错误提供了解决方案。通过环境搭建、软件依赖安装、源码处理及首次运行实战,帮助用户高效完成数据可视化工具的部署与使用。

weixin_28366475的博客 272

Crawler:基于urllib库+实现爬虫有道翻译

Crawler:基于urllib库+实现爬虫有道翻译 目录 输出结果 设计思路 实现步骤 输出结果 后期更新…… 设计思路 第一步:首先要知道,data里面的内容是都需要在代码中发送给服务器的。 第二步:理解反爬虫机制,找出加密参数。大多数网站的反爬虫的机制是对向服务器提交表单的动态值进行加密,所以,我们每翻译一次,就观察data里...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

群晖NAS硬盘挂了别慌!用Ubuntu 18外接USB保姆级数据抢救指南

本文提供群晖NAS硬盘故障时的数据抢救指南,详细介绍了使用Ubuntu 18外接USB硬盘盒的完整流程。从构建救援环境、硬盘识别到数据迁移策略,涵盖关键步骤和实用技巧,帮助用户零成本恢复重要数据。特别适合非RAID配置的单盘故障场景。

9o8p7i6u5y的博客 1148

爬虫实战:有道翻译

1 分析有道翻译的网络请求 有道翻译实际发送网络请求的地址为“http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule”,请求方式为post请求。在请求参数中,通过删减后,“i” , “client” , “salt”, “sign”, “version”, "keyfrom"是必传参数。其中"salt"和"...

HYdongdong2063的博客 952

MTGS与3D高斯泼溅:如何用多轨迹数据重建自动驾驶场景(附代码解析)

本文深入解析了MTGS(多轨迹高斯泼溅)技术在自动驾驶场景重建中的工程实践。该方法通过分层场景表示,巧妙融合多轨迹数据,利用3D高斯泼溅技术统一处理静态几何与动态物体,有效解决了复杂环境下的重建难题。文章结合代码,详细阐述了其实现框架、损失函数设计及优化策略,为构建高保真数字孪生场景提供了实用指南。

v5w6x的博客 447

基因家族扩张收缩分析可视化(CAFE5)

CafePlotter 是一个用于可视化 CAFE5 基因家族扩张收缩分析结果的 Python 工具

xuzhougeng blog 3645

用Python破解有道翻译反爬虫机制

想要系统的学习Python网络爬虫的可以看:零基础:21天搞定Python分布式爬虫破解有道翻译反爬虫机制web端的有道翻译,在之前是直接可以爬的。也就是说只要获取到了他的接口,你就可以肆无忌惮的使用他的接口进行翻译而不需要支付任何费用。那么自从有道翻译推出他的API服务的时候,就对这个接口做一个反爬虫机制(如果大家都能免费使用到他的翻译接口,那他的API服务怎么赚钱)。这个反爬虫机制在爬虫领域算...

NunchakusHuang的专栏 3万+

西门子S7-1200控制伺服/步进电机方法与接线(全)

西门子S7-1200控制伺服/步进电机方法与接线(全) 伺服/步进电机在非标自动化控制中十分常用,但作者发现在各类开源网站上很少有人做西门子1200PLC控制伺服/步进电机的教程,于是今天想着跟大家分享一下。 本文共分为一下几个四个内容。 文章目录西门子S7-1200控制伺服/步进电机方法与接线(全)前言一、准备二、接线1.PLC接线:2.伺服接线:3. 步进电机的接线:三、代码组态代码四、可能出现的问题 前言 工程控制常用到三项异步电机、直流电机等,但他们都无法准确的控制电机角度;于是有了步进电机、

weixin_46060068的博客 7万+

【Python】第十二课 网络爬虫

本章主要讲的是基于Python语言的数据采集,该功能要讲起来可以单独作为一门课程来学习,因为这是一门很重要的课程,一般运用在大数据处理和人工智能上,该应用提供大量的数据。

笔触狂放的博客 9673

机器人常用坐标系详解:原理、获取方法及实战实例

本文系统阐述了机器人四大核心坐标系(世界、基、工具、工件)的原理与标定方法。世界坐标系提供全局参考基准,基坐标系绑定机器人本体,工具坐标系定义末端执行器位置,工件坐标系则锁定作业对象位置。通过齐次变换矩阵实现各坐标系间的关联转换。重点介绍了三类标定技术:手动设定法(世界坐标系)、三点/六点法(工具TCP标定)和视觉识别法(工件标定),并以工业机械臂上下料为例演示了完整应用流程。随着技术发展,自动化标定、动态坐标系等新趋势将进一步提升机器人作业精度与效率。

start_up_go的博客 515

在轻量化与精度之间取得平衡:YOLOv8 + GhostNet 的设计与实验分析

摘要: GhostNet系列(GhostNet、GhostNetv2、GhostNeXt)通过“幽灵特征图”技术,以极低计算量生成丰富特征,为YOLOv8提供轻量化改造方案。该技术能在减少参数量与计算量的同时保持或提升检测精度,适用于边缘设备部署。实现时需替换YOLOv8的Backbone为GhostNet模块,并通过消融实验验证其有效性。实验数据表明,改造后的模型在参数量降低30%的同时,推理速度提升28.6%,mAP@0.5最高提升1.9个百分点,平衡了轻量化与精度,为毕设提供技术创新性与工程落地性的双

m0_64661770的博客 196

python爬取有道翻译出错 {‘errorcode’:50}

import urllib.request import urllib.parse import json content = input("Enter the words needs translated:") url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=ugc" data = {}

weixin_38341450的博客 2万+

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5439

python 爬虫——有道翻译

一、网页解析 打开有道翻译官网: 通过F12,找到网络一栏,寻找”POST”请求,并在“消息头”下找到请求网址,即翻译的原网址 : 观察“参数”一栏,在“数据表单”中找到了输入的字符串赋值给了参数“i”: 观察“响应”一栏,在“响应载荷”中找到了输出的字符串: 此处为字典格式,在代码分析中将对其进行解析。 在“消息头”的“请求头”中找到“User-Agent”: 不同设备对这一段的代码都不同,所以针对自己的设备,复制下这一段代码,用于后续代码编写,这是网站判断是否为爬虫的一个依据。 二、代码解析 u

weixin_42582241的博客 2444

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【好书推荐3】Python网络爬虫入门到实战

本书介绍了Python3网络爬虫的常见技术。首先介绍了网页的基础知识,然后介绍了urllib、Requests请求库以及XPath、Beautiful Soup等解析库,接着介绍了selenium对动态网站的爬取和Scrapy爬虫框架,最后介绍了Linux基础,便于读者自主部署编写好的爬虫脚本。本书所有代码和相关素材可以到GitHub下载获取,地址为https://github.com/sfvsfv/Crawer。本书主要面向对网络爬虫感兴趣的初学者。杨涵文。

定期分享我的发现和想法,感谢你的陪伴和支持 7927

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

python一行代码实现百度翻译和有道翻译结果获取-----py学习爬虫历程(一)

一.本节需要的知识1-1:.urlopenurllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)¶1-2 :.Requesturllib.request.Request(url, data=None, headers={}, origi...

weixin_42251851的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

python爬虫 爬取有道翻译详解

这里我们使用python的urllib来实现 首先,我们需要找到我们进行翻译时上传给服务器的数据。 我们可以通过查找审查元素中的Network这一栏目下,选择执行Post方法的选项。 在General下的Request URL就是我们访问的链接 url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=r...

凌桓丶的博客 3407

Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果

运行平台:Windows Python版本:Python3.x IDE:Sublime text3

Jack-Cui 4万+

Python爬虫爬有道翻译

python爬取有道翻译实现原理操作步骤注意事项 实现原理 利用urllib包中的request对象模拟浏览器访问有道翻译服务器(发送相同格式的request)。 用urllib包中的parse来将数据转化为相同格式。 得到的相应通过编码之后,以dict形式取出翻译内容。 import urllib.request import urllib.parse import json url = 'h...

Gear_World的博客 1231

python爬虫详解

博客对 Python 爬虫进行了详解。内容包括介绍了 Python 如何访问互联网,具体阐述了访问网站并保存图片的方法,以及访问有道并进行翻译的操作。

zdb 5262

Python爬虫之urllib+Json+post向有道翻译发送数据获得翻译结果(六)

这篇文章要介绍的内容是,使用urllib和Json库,通过post向浏览器发送数据,从而实现利用Python就可以使用爬虫网站的特定功能:我们这篇的实例是向《有道翻译》中发送数据,并自动给出翻译。如下图1所示:   图1 首先我们还是先给出代码: from urllib import request#注释1 from urllib import parse import json def get...

Blessy_Zhu的博客 2583
上一篇: python爬虫学习之路(1) 利用urllib爬取网站
下一篇: python爬虫学习之路(3) urllib.error异常
QEcode
博客等级 码龄10年 39粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值