前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-数据传输-urllib库

Python-数据传输-urllib库

作者头像
小团子
发布2019-07-18 15:08:56
5910
发布2019-07-18 15:08:56
举报
文章被收录于专栏:数据云团数据云团

Python-数据挖掘-urllib库

在爬取网页时,通过 URL 传递数据给服务器,传递数据的方式主要分为 GET 和 POST 两种。这两种方式最大的区别在于:GET 方式是直接使用 URL 访问,在 URL 中包含了所有的参数;POST 方式则不会在 URL 中显示所有的参数。

一、URL 编码转换

当传递的 URL 包含中文或者其它特殊字符(例如,空格或"/"等)时,需要使用 urllib.parse 库中的 urlencode() 方法将 URL 进行编码,它可以将 key:value 这样的键值对转换成 “key=value” 这样的字符。

代码语言:javascript
复制
import urllib.parse
data = {
  "a": "数据云团",
  "b": "小团子"
}
result = urllib.parse.urlencode(data)
print(result)

反之,解码使用的是 urllib.parse 库的 unquote() 方法:

代码语言:javascript
复制
import urllib.parse
result = urllib.parse.unquote("a=%E6%95%B0%E6%8D%AE%E4%BA%91%E5%9B%A2")
print(result)

二、处理 GET 请求

GET 请求一般用于向服务器获取数据,例如,用百度搜索课聘(URL 是https://www.baidu.com/s?wd=课聘)

在这个请求中,“?” 后面的字符串就包含了要查询的关键字 “课聘”。下面尝试使用 GET 方式发送请求:

代码语言:javascript
复制
import urllib.request
import urllib.parse

url = "http://www.baidu.com/s"
word = {"wd": "课聘"}
# 转换成 URL 编码格式
word = urllib.parse.urlencode(word)
new_url = url + "?" + word
headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
}
request = urllib.request.Request(new_url, headers=headers)
response = urllib.request.urlopen(request)
html = response.read().decode("UTF-8")
print(html)

三、处理 POST 请求

urlopen() 方法,发送请求时,如果是以 POST 方式发送请求,urlopen() 方法必须设置 data 参数。data 参数以字典的形式存放数据。

当访问有道词典翻译网站进行词语翻译时,会发现不管输入什么内容,其 URL 一直都是 http://fanyi.youdao.com,可以知道该网站向服务器发送的是 POST 请求:

代码语言:javascript
复制
import urllib.request
import urllib.parse

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
}

formdata = {
  "type": "AUTO",
  "i": "I love Python",
  "doctype": "json",
  "xmlVersion": "1.8",
  "keyfrom": "fanyi.web",
  "ue": "UTF-8",
  "action": "FY_BY_ENTER",
  "typeResult": "true"
}

data = bytes(urllib.parse.urlencode(formdata).encode("utf-8"))
request = urllib.request.Request(url, data=data, headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode("utf-8"))
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档