urllib 之 Request类
为什么使用Request类?
功能比urlopen强大,可以设置请求头,达到正确访问的目的。
调用方式:
创建一个Request对象rq
调用request模块的urlopen传入对象rq
作业:
1. 爬取猫眼实时电影数据
from urllib import request
url = 'https://piaofang.maoyan.com/dashboard-ajax?orderType=0&uuid=1734361ae5fc8-0b0934f0550e79-3b634404-1fa400-1734361ae5fc8&riskLevel=71&optimusCode=10' # url为json文件的url地址
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
rq = request.Request(url, headers=header)
resp = request.urlopen(rq)
print(resp.getcode())
print(resp.read().decode('utf8'))
2. 爬取别逗了多页数据
'''
爬取别逗了多个页面信息
'''
from urllib import request
import time
url = 'https://www.biedoul.com/index/'
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
for i in range(29892, 29903):
url = 'https://www.biedoul.com/index/' + str(i)
rq = request.Request(url, headers=header)
resp = request.urlopen(rq)
print(resp.read().decode('utf8'))
time.sleep(1)
1 猫眼实时数据是通过ajax再次发送请求获取数据,因此我们爬取到的网页源码中没有我们想要的最终页面的数据,这是我们可以在network里面查找ajax请求获取到的Json数据,并且请求该数据的url,从而爬取到想要的数据
2 别逗了网页源码就是最终呈现的页面,因此我们只需要请求相应页面的url就可以爬取数据,在进行多页爬取的时候,遇到一个坑,在for循环中进行url拼接的时候,写成了url = url + str(变量i),这里出现了url不符合预期的情况,因此没爬取到想要的数据,最后修改为 url = 'https://www.biedoul.com/index/' + str(变量i),,爬取到相应的多页数据。
总结:Request类要比单纯使用urlopen功能强大,可以进行请求头的配置,伪装浏览器发送网络请求