1、准备工作
和上一次课的准备工作一致。
2、分析网页
1、打开网页
2、选取2019年的电影并分析其网页链接
2019年电影票房
第一页:http://movie.mtime.com/boxoffice/#CN/2019
第二页:http://movie.mtime.com/boxoffice/#CN/2019
…
最后一页:http://movie.mtime.com/boxoffice/#CN/2019
发现每一页的网页链接都是一样的,所以直接爬取网页的链接是不可取的,我们采取上次课的学习内容,用ajax抓包的方式来爬取链接
3、分析ajax包的链接
(1)查看ajax包是否内容正确
发现内容确实是我们所想要的内容
(2)分析ajax包的链接的规律
第一页:http://movie.mtime.com/boxoffice/?year=2019&area=china&type=MovieRankingYear&category=all&page=0&display=list×tamp=1587174581492&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json
第二页:http://movie.mtime.com/boxoffice/?year=2019&area=china&type=MovieRankingYear&category=all&page=1&display=list×tamp=1587174599209&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json
…
最后一页:http://movie.mtime.com/boxoffice/?year=2019&area=china&type=MovieRankingYear&category=all&page=9&display=list×tamp=1587174613531&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json
发现链接之间有变化的为page和timestamp两个部分
(3)用for循环爬取网页所有电影的ajax链接
for page in range(10):#为“for page in range(0,10,1)”的简写
print ("正在爬取%s页。。。。。"%(page+1))
url = "http://movie.mtime.com/boxoffice/?year=2020&area=china&type=MovieRankingYear&category=all&page=%s&display=list×tamp=1586758678446&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json"%page
3、抓取ajax包
1、检查网页
2、查询ajax的代理和请求方式
按照顺序点击,并查找
(1)代理方式
(2)字典
3、请求网页
(1)正常请求
import requests
url = "http://movie.mtime.com/boxoffice/?year=2019&area=china&type=MovieRankingYear&category=all&page=0&display=list×tamp=1586758678446&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json"
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
requests.get(url= url)
运行结果为:
结果输出为521不是200,说明有错误。
(2)cookie值
上面的请求失误是因为网页有反爬虫,这里我们需要一个身份证明,就是“cookie”,将其放入代理中来伪装我们的身份,来跳过网页的反爬虫。
(3)cookie值的查询
与查找代理一样的步骤
(4)放入请求代码的headers中
import requests
url = "http://movie.mtime.com/boxoffice/?year=2019&area=china&type=MovieRankingYear&category=all&page=0&display=list×tamp=1587175350317&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json"
headers = {
'Cookie':'_userCode_=2020418943319761; _userIdentity_=2020418943319882; userId=0; defaultCity=%25E5%258C%2597%25E4%25BA%25AC%257C290; _ydclearance=0727d3a1a8b8c2b43ce53545-898d-4121-b3ae-c28cad83fd56-1587181343; _tt_=1B6780C77FCA13619F3729D19CEA8D35; Hm_lvt_6dd1e3b818c756974fb222f0eae5512e=1587174213; Hm_lpvt_6dd1e3b818c756974fb222f0eae5512e=1587174213; __utma=221034756.2128731208.1587174213.1587174213.1587174213.1; __utmc=221034756; __utmz=221034756.1587174213.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmb=221034756.2.10.1587174213',
'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
}
requests.get(url=url, headers