原做者及原文连接: blog.csdn.net/c406495762/…html
运行平台:Windows Python版本:Python3.x IDE:Sublime text3python
上一篇内容,已经学会了使用简单的语句对网页进行抓取。接下来,详细看下urlopen的两个重要参数url和data,学习如何发送数据data。web
url不只能够是一个字符串,例如:www.baidu.com。url也能够是一个Request对象,这就须要咱们先定义一个Request对象,而后将这个Request对象做为urlopen的参数使用,方法以下:json
# -*- 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)
复制代码
一样,运行这段代码一样能够获得网页信息。能够看一下这段代码和上个笔记中代码的不一样,对比一下就明白了。bash
urlopen()返回的对象,可使用read()进行读取,一样也可使用geturl()方法、info()方法、getcode()方法。服务器
geturl()返回的是一个url的字符串;session
info()返回的是一些meta标记的元信息,包括一些服务器的信息;app
getcode()返回的是HTTP的状态码,若是返回200表示请求成功。函数
关于META标签和HTTP状态码的内容能够自行百度百科,里面有很详细的介绍。学习
了解到这些,咱们就能够进行新一轮的测试,新建文件名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()))
复制代码
能够获得以下运行结果:
咱们可使用data参数,向服务器发送数据。根据HTTP规范,GET用于信息获取,POST是向服务器提交数据的一种请求,再换句话说:
从客户端向服务器提交数据使用POST;
从服务器得到数据到客户端使用GET(GET也能够提交,暂不考虑)。
若是没有设置urlopen()函数的data参数,HTTP请求采用GET方式,也就是咱们从服务器获取信息,若是咱们设置data参数,HTTP请求采用POST方式,也就是咱们向服务器传递数据。
data参数有本身的格式,它是一个基于application/x-www.form-urlencoded的格式,具体格式咱们不用了解, 由于咱们可使用urllib.parse.urlencode()函数将字符串自动转换成上面所说的格式。
向有道翻译发送data,获得翻译结果。
新建文件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)
复制代码
这样咱们就能够查看翻译的结果了,以下图所示:
JSON是一种轻量级的数据交换格式,咱们须要从爬取到的内容中找到JSON格式的数据,这里面保存着咱们想要的翻译结果,再将获得的JSON格式的翻译结果进行解析,获得咱们最终想要的样子:杰克。
圆方圆学院聚集 Python + AI 名师,打造精品的 Python + AI 技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。 公开课地址: ke.qq.com/course/3627…
加入python学习讨论群 78486745 ,获取资料,和广大群友一块儿学习。