当前位置:脚本大全 > > 正文

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

时间:2021-10-05 00:26:06类别:脚本大全

python爬虫request方法介绍

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

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

一、urlopen的url参数 agent

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

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • # -*- 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()方法。

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

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

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

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

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

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

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

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • # -*- 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()))
  • 可以得到如下运行结果:

    python爬虫request方法介绍(详解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.打开有道翻译界面,如下图所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • # -*- 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)
  • 这样我们就可以查看翻译的结果了,如下图所示:

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

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

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

    原文链接:https://blog.csdn.net/c406495762/article/details/59095864
    上一篇下一篇

    猜您喜欢

    热门推荐