详解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获取本地计算机名字的方法
Apr 29 Python
python使用super()出现错误解决办法
Aug 14 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
Python3安装pip工具的详细步骤
Oct 14 Python
Django后台管理系统的图文使用教学
Jan 20 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
python opencv肤色检测的实现示例
Dec 21 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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
php实现插入排序
2015/03/29 PHP
php实现json编码的方法
2015/07/30 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
ThinkPHP5 的简单搭建和使用详解
2018/11/15 PHP
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
JS操作HTML自定义属性的方法
2015/02/10 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
美国狗旅行和户外用品领先供应商:kurgo
2020/08/18 全球购物
西安交大自主招生自荐信
2014/01/27 职场文书
火车来了教学反思
2014/02/11 职场文书
婚庆司仪主持词
2014/03/15 职场文书
低碳环保标语
2014/06/12 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
联谊活动总结
2014/08/28 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年学校安全工作总结
2015/04/22 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python