Python 爬虫04 request.data 的使用

request.data 的使用

  • 访问网络的两种方法

get:

  • 利用参数给服务器传递信息
  • 参数为 dict,然后使用 parse 编码

案例 v1

# GET 方式请求
from urllib import request, parse
# 使用 parse 模块对 URL 进行参数编码
urls = "http://www.baidu.com/s?"
wd = input("请输入: ")
qs = {
  "wd": wd
}
# 转换 URL 编码
qs = parse.urlencode(qs)
url = urls + qs
print(url)
rsp = request.urlopen(url)
html = rsp.read()
htm = html.decode()
print(htm)
  •  

post:

  • 一般向服务器传递参数使用
  • post 是把信息自动加密处理
  • 想使用 post 信息,需要用到 data 参数
  • 使用 post ,意味着需要对 HTTP 的请求头进行修改: 
    1. Content-Type: application/x-www.form-urlencode
    2. Content-Length: 数据长度
    3. 一旦更改请求方法,注意其它请求头部信息相适应
  • urllib.parse.urlencode 可以将字符串自动转换成上面 案例V1 格式

案例 v2

import json
from urllib import request, parse
"""
1. 利用 data 的构造内容,然后 URLopen 打开
2. 返回 json 格式的结果
3. 结果就应该是解释
"""
url = "http://fanyi.baidu.com/sug"
# 存放用来模拟 form 的数据,一定是 dict 格式
data = {
  "kw": "girl"
}
# 使用 parse 模块对 data 进行编码
data = parse.urlencode(data).encode()
# 构造请求头, 请求头应该至少包含传入的数据长度
# request 要求传入的请求头是一个 dict 格式
header = {
  "Content-Length": len(data)
}
# 拥有请求头,data, URL,就可以尝试发送请求
rsp = request.urlopen(url, data = data)
json_data = rsp.read().decode()
# 把 json 转换为 dict
json_data = json.loads(json_data)
# print(json_data)
for item in json_data['data']:
  print(item['k'], ":", item['v'])
  •  
  • 设置更多的请求信息,单纯的通过 URLopen 函数已经不好用了
  • 需要利用 request.Request 类
import json
from urllib import request, parse
"""
1. 利用 data 的构造内容,然后 URLopen 打开
2. 返回 json 格式的结果
3. 结果就应该是解释
"""

url = "http://fanyi.baidu.com/sug"
# 存放用来模拟 form 的数据,一定是 dict 格式
data = {
  "kw": "girl"
}

# 使用 parse 模块对 data 进行编码
data = parse.urlencode(data).encode('UTF-8')

# 构造请求头, 请求头应该至少包含传入的数据长度
# request 要求传入的请求头是一个 dict 格式

header = {
  "Content-Length": len(data)
}
# 构造一个 Request 的实例
req = request.Request(url, data = data, headers=header)
# 因为已经构造了一个 request 的请求实例,所有的请求信息都可以封装在 Request 实例中
rsp = request.urlopen(req)
json_data = rsp.read().decode("UTF-8")

# 把 json 转换为 dict
json_data = json.loads(json_data)
# print(json_data)
for item in json_data['data']:
  print(item['k'], ":", item['v'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值