URL
urllib
模块提供了一系列的用于操作URL的功能。其中常用的是Get操作和Post操作,这在爬虫应用中是十分常用的。对于HTML的解析,建议使用Beautiful Soup库,因为这个功能库有中文文档,所以这里不再赘述。
Get操作
urllib
中的request
模块可以非常方便的抓取URL内容,也就是通过GET请求获取相应的HTTP响应。具体使用可参考以下示例。
from urllib import request
with request.urlopen('http://www.baidu.com') as f:
data = f.read()
print('Status: {} {}'.format(f.status, f.reason))
for k, v in f.getheaders():
print('{}: {}'.format(k, v))
print('Data: {}'.format(data.decode('utf-8')))
如果需要模拟浏览器发送的GET请求,就需要使用Request
对象。Request
对象可以添加HTTP头,这样就可以伪装成浏览器了。
将上例改写一下,改成模拟浏览器请求的方式。
from urllib import request
req = reqeust.Request('http://www.baidu.com')
req.add_header('User-Agent', 'xxxxxxxx')
with request.urlopen(req) as f:
data = f.read()
print('Status: {} {}'.format(f.status, f.reason))
for k, v in f.getheaders():
print('{}: {}'.format(k, v))
print('Data: {}'.format(data.decode('utf-8')))
Post操作
要发送POST请求,同样是使用request
模块,但是需要将要提交的参数以bytes形式传入。例如:
from urllib import request, parse
email = input('Email: ')
passwd = input('Password: ')
login_data = parse.urlencode([
('username', email),
('password', passwd),
('entry', 'mweibo'),
('client_id', ''),
('savestate', '1'),
('ec', '')
])
req = request.Request('https://passport.weibo.cn/sso/login')
req.add_header('Origin', 'https://passport.weibo.cn')
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
with request.urlopen(req, data=login_data.encode('utf-8')) as f:
print('Status:', f.status, f.reason)
for k, v in f.getheaders():
print('%s: %s' % (k, v))
print('Data:', f.read().decode('utf-8'))