python3爬虫攻略(2):urllib.request(2)

上一次我们讲了urllib.request模块的最简单用法,接下来我们要学习它另外的几个方法,使用Request和提交POST数据。

一:使用Request

urllib.request.Request(url, data=None, headers={}, method=None)

使用request()来包装请求,再通过urlopen()获取页面。

# -*- coding:utf-8 -*-
from urllib import request,parse
url="http://www.umei.cc/meinvtupian/xingganmeinv/"
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"}
req = request.Request(url, headers=headers)
html= request.urlopen(req).read().decode("utf-8")
print(html)

添加headers头请求是为了让网站认为我们是浏览器发送请求而不是urllib请求

当然也可以将headers头请求写完全一点比如:

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)'
'Referer': 'http://www.lagou.com/zhaopin/Python/?labelWords=label',
'Connection': 'keep-alive'
}

-  User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号、默认语言

-  Referer:可以用来防止盗链,有一些网站图片显示来源http://***.com,就是检查Referer来鉴定的

-  Connection:表示连接状态,记录Session的状态。


二:POST

urllib.request.urlopen(urldata=None[timeout]*cafile=Nonecapath=Nonecadefault=Falsecontext=None)

urlopen()的data参数默认为None,当data参数不为空的时候,urlopen()提交方式为Post。

提交post数据的时候需要将data数据进行urlencode()处理,转化为URL编码

这里需要使用道urllib.parse.urlencode()方法

# -*- coding:utf-8 -*-
from urllib import parse
data={
		"from":"zh",
		"to":"en",
		"query":"拿破仑",
		"transtype":"realtime",
		"simple_means_flag":3	
	}
data = parse.urlencode(data).encode('utf-8')
处理后的url编码为:

from=zh&to=en&query=%E6%8B%BF%E7%A0%B4%E4%BB%91&transtype=realtime&simple_means_flag=3

Post的数据必须是bytes或者iterable of bytes,不能是str,因此需要进行encode()编码


这里展示一个小案例,发送表单数据给百度翻译,然后会得到一个json对象!

# -*- coding:utf-8 -*-
from urllib import request,parse
url="http://fanyi.baidu.com/v2transapi"
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"}
data={
		"from":"zh",
		"to":"en",
		"query":"拿破仑",
		"transtype":"realtime",
		"simple_means_flag":3	
	}
data = parse.urlencode(data).encode('utf-8')
req = request.Request(url, headers=headers, data=data)
html = request.urlopen(req).read().decode("utf-8")
print(html)

运行结果


放到http://www.json.cn中解析,得到以下结果



是不是看到翻译结果啦!拿破仑->Napoleon


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值