这里写目录标题
爬取电影信息
***摘要:***之前爬取过基于html跳转的豆瓣TOP250的电影,以及基于ajax跳转的美团的评论,这次将介绍如何爬取基于html和ajax两种跳转方式且含有反爬虫程序和异常值的电影信息网页
**目标网站:**http://movie.mtime.com/boxoffice/#CN/2018
1、分析网页
打开网页后,向下滑,根据页面分析可知,该网站每一年有100部电影,且有10个页面,每个页面有10部。
1.1 爬取目标
1.2 对2018年的电影的部分页面进行分析与对比
对比可以发现,在2018年的电影里面,无论是哪个页面,它的网址都没有改变。
分析结果:
据以上结果可看出,当点击选择到2018年的电影信息,并进行切换时,链接都为
http://movie.mtime.com/boxoffice/#CN/2018
切换网页时链接没有发生改变,说明在2018年的电影信息这个部分,网页是基于ajax跳转的,可以利用抓包技术对网页进行爬取。
1.3 分析点击2018年时10个页面的json文件
1.3.1 寻找json文件
在2018年电影页面右键找到检查–>Network–>选中需要的页面–>点击文件:
第一个文件就为json文件,选中文件,右键copy–>copy link address:
2018年时第一个页面的json文件链接为:
http://movie.mtime.com/boxoffice/?year=2018&area=china&type=MovieRankingYear&category=all&page=0&display=list×tamp=1586871242566&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json
2018年时第二个页面的json文件链接为:
http://movie.mtime.com/boxoffice/?year=2018&area=china&type=MovieRankingYear&category=all&page=1&display=list×tamp=1587188701100&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json
2018年时第十个页面的json文件链接为:
http://movie.mtime.com/boxoffice/?year=2018&area=china&type=MovieRankingYear&category=all&page=9&display=list×tamp=1587188842026&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json
对比三个链接可以发现有两个地方不同:
因为我们找的是第一页,第二页和第十页的链接,所以此处的0,1,9表示的是第一页,第二页和第十页
此处的timestamp是时间戳。
1.4 请求并筛选我们需要的信息
1.4.1 导入需要用的库
import requests,csv,time, re
from lxml import etree
1.4.2 设置浏览器代理,构造字典,向服务器请求json文件
# 导入需要的库
import csv,requests,time
from lxml import etree
# 设置浏览器代理,构造字典
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
}
#此处的url暂时放入的是page=0时,2018年的电影信息第一页
url="http://movie.mtime.com/boxoffice/?year=2018&area=china&type=MovieRankingYear&category=all&page=0&display=list×tamp=1587124108705&version=07bb781100018dd58eafc3b35d42686804c6df8d&dataType=json"
requests.get(url=url,headers=headers).text
运行结果如下:
之所以会出现乱码,是因为遇到了反爬虫程序,所以请求的json文件内容为乱码。
将.text
去掉,再次运行:
结果为200才是运行成功,所以此时我们需要为json文件找一个“身份证”,即cookie值。
1.4.2.1 寻找cookie值
右键–>检查–>Network–>选中需要的页面–>headers–>下拉找到cookie:
利用cookie解决请求json源代码时返回乱码的问题
什么是cookie?
相当于一个能够成功访问网页内容的钥匙,有了这个钥匙,在面对反爬虫程序时,我们就能成功破解反爬虫程序,使得请求源代码时成功返回内容,而不再返回乱码
将cookie值构造为字典:
# 导入需要的库
import csv,requests,time
from lxml import etree
# 设置浏览器代理,构造字典
#同时构造多个字典时,字典之间要用逗号隔开(不是在最后一个字典结尾加)
headers={
'Cookie':'_userCode_=20204181236133602; _userIdentity_=20204181236135645; userId=0; defaultCity=%25E5%258C%2597%25E4%25BA%25AC%257C290; _ydclearance=548f63b0a9eafb4499bcc9f2-2f5a-4569-8e14-35d82c84daf5-1587191747; _tt_=8DBF2DEB13DB835B64579E70790BBE50; Hm_lvt_6dd1e3b818c756974fb222f0eae5512e=1587184575; __utmc=221034756; __utmz=221034756.1587184575.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=221034756.1067809064.1587184575.1587184575.1587186771.2; Hm_lpvt_6dd1e3b818c756974fb222f0eae5512e=1587188372; __utmb=221034756.20.10.158718677',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
}
#此处的url暂时放入的是page=0时,2018年的电影信息第一页
url="http://movie.mtime.com/boxoffice/?year=20