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


Posted in Python onMay 07, 2019

上一篇内容,已经学会了使用简单的语句对网页进行抓取。接下来,详细看下urlopen的两个重要参数url和data,学习如何发送数据data

一、urlopen的url参数 Agent

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

url不仅可以是一个字符串,例如:http://www.baidu.com。url也可以是一个Request对象,这就需要我们先定义一个Request对象,然后将这个Request对象作为urlopen的参数使用,方法如下:

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
  req = request.Request("http://fanyi.baidu.com/")
  response = request.urlopen(req)
  html = response.read()
  html = html.decode("utf-8")
  print(html)

同样,运行这段代码同样可以得到网页信息。可以看一下这段代码和上个笔记中代码的不同,对比一下就明白了。

urlopen()返回的对象,可以使用read()进行读取,同样也可以使用geturl()方法、info()方法、getcode()方法。

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

geturl()返回的是一个url的字符串;

info()返回的是一些meta标记的元信息,包括一些服务器的信息;

getcode()返回的是HTTP的状态码,如果返回200表示请求成功。

关于META标签和HTTP状态码的内容可以自行百度百科,里面有很详细的介绍。

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

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

了解到这些,我们就可以进行新一轮的测试,新建文件名urllib_test04.py,编写如下代码:

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
  req = request.Request("http://fanyi.baidu.com/")
  response = request.urlopen(req)
  print("geturl打印信息:%s"%(response.geturl()))
  print('**********************************************')
  print("info打印信息:%s"%(response.info()))
  print('**********************************************')
  print("getcode打印信息:%s"%(response.getcode()))

可以得到如下运行结果:

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

二、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()函数将字符串自动转换成上面所说的格式。

三、发送data实例

向有道翻译发送data,得到翻译结果。

1.打开有道翻译界面,如下图所示:

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

2.鼠标右键检查,也就是审查元素,如下图所示:

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

3.选择右侧出现的Network,如下图所示:

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

4.在左侧输入翻译内容,输入Jack,如下图所示:

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

5.点击自动翻译按钮,我们就可以看到右侧出现的内容,如下图所示:

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

6.点击上图红框中的内容,查看它的信息,如下图所示:

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

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

7.记住这些信息,这是我们一会儿写程序需要用到的。

新建文件translate_test.py,编写如下代码:

# -*- coding: UTF-8 -*-
from urllib import request
from urllib import parse
import json

if __name__ == "__main__":
  #对应上图的Request URL
  Request_URL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=https://www.baidu.com/link'
  #创建Form_Data字典,存储上图的Form Data
  Form_Data = {}
  Form_Data['type'] = 'AUTO'
  Form_Data['i'] = 'Jack'
  Form_Data['doctype'] = 'json'
  Form_Data['xmlVersion'] = '1.8'
  Form_Data['keyfrom'] = 'fanyi.web'
  Form_Data['ue'] = 'ue:UTF-8'
  Form_Data['action'] = 'FY_BY_CLICKBUTTON'
  #使用urlencode方法转换标准格式
  data = parse.urlencode(Form_Data).encode('utf-8')
  #传递Request对象和转换完格式的数据
  response = request.urlopen(Request_URL,data)
  #读取信息并解码
  html = response.read().decode('utf-8')
  #使用JSON
  translate_results = json.loads(html)
  #找到翻译结果
  translate_results = translate_results['translateResult'][0][0]['tgt']
  #打印翻译信息
  print("翻译的结果是:%s" % translate_results)

这样我们就可以查看翻译的结果了,如下图所示:

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

JSON是一种轻量级的数据交换格式,我们需要从爬取到的内容中找到JSON格式的数据,这里面保存着我们想要的翻译结果,再将得到的JSON格式的翻译结果进行解析,得到我们最终想要的样子:杰克。

以上所述是小编给大家介绍的Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
python实现复制整个目录的方法
May 12 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
python 对txt中每行内容进行批量替换的方法
Jul 11 Python
python实现扫描ip地址的小程序
Apr 16 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
python求前n个阶乘的和实例
Apr 02 Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 Python
Python实现滑雪小游戏
Sep 25 Python
python对象与json相互转换的方法
May 07 #Python
python使用threading.Condition交替打印两个字符
May 07 #Python
python实现银联支付和支付宝支付接入
May 07 #Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 #Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 #Python
Python数据类型之Set集合实例详解
May 07 #Python
Python数据类型之Dict字典实例详解
May 07 #Python
You might like
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP修改session_id示例代码
2014/01/08 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
JavaScript Eval 函数使用
2010/03/23 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
Linux下Python获取IP地址的代码
2014/11/30 Python
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
理解Python中的类与实例
2015/04/27 Python
Python判断telnet通不通的实例
2019/01/26 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
Python对wav文件的重采样实例
2020/02/25 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
玖熙女鞋美国官网:Nine West
2016/10/06 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
优秀团员自我评价范文
2014/04/23 职场文书
假期安全教育广播稿
2014/10/04 职场文书
小学记事作文之200字
2019/08/06 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server