python爬虫AJAX数据爬取和HTTPS访问 | python爬虫实战之四
urllib3库
https://urllib3.readthedocs.io/en/latest/
标准库urllib缺少了一些关键的功能, 非标准库的第三方库urllib3提供了, 比如说连接池管理。
安装
$ pip install urllib3
之后,我们来借用之前的json数据来看一下:
import urllib3
from urllib.parse import urlencode
from urllib3.response import HTTPResponse
jurl = 'https://movie.douban.com/j/search_subjects'
d = {
'type':'movie',
'tag':'热门',
'page_limit':10,
'page_start':10
}
with urllib3.PoolManager as http:
# http.urlopen()
response = http.request('GET', '{}?{}'.format(jurl, urlencode(d)), headers={
'User-agent': "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"
})
print(type(response))
# response:HTTPResponse = HTTPResponse()
print(response.status)
print(response.data)
执行结果:
这个封装的属性和方法还是比较原始的,我们对于这样的使用肯定是不行的,那我们需要用什么呢?接着来讲requests库。
requests库
requests使用了urllib3, 但是API更加友好, 推荐使用。
需要先安装,跟之前一样。
安装:
$ pip install requests
我们对上面的例子做出修改:
import urllib3
from urllib.parse import urlencode
from urllib3.response import HTTPResponse
import requests
jurl = 'https://movie.douban.com/j/search_subjects'
d = {
'type':'movie',
'tag':'热门',
'page_limit':10,
'page_start':10
}
url = '{}?{}'.format(jurl, urlencode(d))
response = requests.request('GET', url, headers = {
'User-agent': "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"
})
with response:
print(response.text)
print(response.status_code)
print(response.url)
print(response.headers)
print(response.request)
执行结果:
我们具体来看一下request:
print(response.headers, '~~~~~')
print(response.request.headers)
上面的headers
是response的,下面的是请求的headers
。
执行结果:
里面还有别的参数,大家可以去尝试一下。
requests默认使用Session对象, 是为了在多次和服务器端交互中保留会话的信息, 例如cookie。
直接使用Session:
我们也来尝试去打印一下这些信息:
import requests
urls = ['https://www.baidu.com/s?wd=magedu', 'https://www.baidu.com/s?wd=magedu']
session = request.session()
with session:
for url in urls:
response = session.get(url, headers = {
'User-agent': "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"
})
with response:
print(response.text[:50])
print('-'*30)
print(response.cookies)
print('-'*30)
print(response.headers, '~~~~~')
print(response.request.headers)
执行结果:
通过结果可以看出,Session对象对cookie起了作用。观察第一次返回的cookie与第二次发起请求的response.request.headers的cookie。返回的结果依然是键值对,只是之中value的值依然是用键值对来表示的。
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站