详解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 相关文章推荐
Python实现子类调用父类的方法
Nov 10 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
利用aardio给python编写图形界面
Aug 21 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
学习python分支结构
May 17 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Python sep参数使用方法详解
Feb 12 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
python 实现socket服务端并发的四种方式
Dec 14 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
for循环连续求和、九九乘法表代码
2012/02/20 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
javascript事件问题
2009/09/05 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
浅析JavaScript异步代码优化
2019/03/18 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
python实现爬虫下载美女图片
2015/07/14 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python3中详解fabfile的编写
2018/06/24 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
python3 re返回形式总结
2020/11/20 Python
HTTP状态码详解
2021/03/18 杂记
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
北京青年观后感
2015/06/15 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python