EX1 | 用Python爬取猫眼电影 APP 关于《无双》电影评论
在本次推送中,以猫眼电影 APP 中的电影评论作为爬取目标,完成对网页数据的采集。在采集完成后,我们将每个评论数据采集分用户名、评论时间、用户性别、用户等级、用户所在城地、用户评分、以及评论内容等,并将它们以 .xls
的文件格式进行保存。
1 准备工作
在爬虫开始之前,请确保已经安装好了 requests 库、xlwt 库以及 json 库。如果没有安装,请使用 cmd 打开命令行界面,输入以下代码:
pip install requests
pip install xlwt
pip install json
2 抓取分析
我们发现,在猫眼PC端的网页中,只存在最热门的10条评论数据,这显示是不够支撑我们进行后续的数据分析的。
猫眼PC端网页地址 https://maoyan.com/films/342166
因此,我们选择登录手机网页版本,即
按下 F12
或者鼠标点击右键检查
按钮,点击进入Network一栏。如下图所示:
随后我们再次按下 F5
刷新按钮,有时需要按下 CTRL
+ F5
组合键。便能够将页面再次刷新。寻找网站评论入口,如下图所示:
可以看到里面包含了 Request URL
(请求地址)、Request Method
(请求方式)、Status Code
(状态码)等信息。再往下翻比较重要的信息就是 Host
、Referer
、User-Agent
、以及X-Requested-With
等信息。
这些信息获取之后,我们便可以开始今天的爬虫工作了。
3 爬取信息
首先,我们需要导入一些第三方库。具体如下:
import requests
import xlwt
import json
其中,requests 库是用来向服务器发送 GET
类型的请求,xlwt 库是用来操作 .xls
文件的,而我们的数据因为是 json
格式的数据,因此需要对它进行解析,这里便用到了 json 库。
3.1 设置请求头
一般情况下,为了避免触发反爬虫机制,需要完善一下请求头信息,这里我们把它作为一个独立的函数方便后续调用,具体如下:
def get_page(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36',
'Cookie':'_lxsdk_cuid=1661ae34b39c8-0c8c15380422c-2711639-144000-1661ae34b39c8; v=3; __utma=17099173.21012536.1539393286.1539393286.1539393286.1; __utmc=17099173; __utmz=17099173.1539393286.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utmb=17099173.2.9.1539393288643; uuid_n_v=v1; iuuid=B7EC5090CE8511E89675C9EEEAD92C526D3F6AA2E9344F5091F4218FA118AAEF; webp=true; ci=55%2C%E5%8D%97%E4%BA%AC; __mta=207950381.1538049396050.1539393287057.1539393443480.10; _lx_utm=utm_source%3Dgoogle%26utm_medium%3Dorganic; _lxsdk=B7EC5090CE8511E89675C9EEEAD92C526D3F6AA2E9344F5091F4218FA118AAEF; _lxsdk_s=1666af306c5-403-5fd-037%7C%7C45',
'Host':'m.maoyan.com',
'Referer':'http://m.maoyan.com/movie/342166/comments?_v_=yes',
'X-Requested-With':'superagent'
}
return requests.get(url,headers = headers)
接下来我们便开始网页评论的爬取工作。
3.2 评论爬取与保存
在分析爬取的网址时,具体如下:
http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=0&startTime=0
http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=15&startTime=2018-10-15%2016%3A56%3A10
http://m.maoyan.com/mmdb/comments/movie/342166.json?_v_=yes&offset=30&startTime=2018-10-15%2016%3A56%3A10
我们发现,网页请求URL前面部分都是一致的,只有在 offset
的地方才发生改变,而后面的 startTime
便是你此刻获取最新评论的最后时间(这里的内容不是很重要,我们可以从任意时间获取评论)。最简单的做法就是我们直接更改 offset
位置的数字,从0,15,30,……一直加下去。
但是这个时候问题又出现了,采取这一方式只能获取当天的前1000条评论,怎么办?后来我又发现可以对 startTime
的时间进行修改。比如当前的日期是2018-10-15,只要电影上映后,任意的时间日期我都可以获取到数据。此时可以再加入一个对日期的循环。
这里的爬取网页 URL 的任务我们便完成了,接下来便是对数据的保存工作。我们选择 .xls
文件进行保存,因为第三方 xlwt 库只能对文件保存一次,后续的修改将会覆盖之间的内容。因此我们将文件的保存一并写入评论获取的函数中,方便操作。具体代码如下:
def get_comment():
comment = [None] * 7
file = 'Project_Gutenberg_comment.xls'
# 创建一个Excel
book = xlwt.Workbook()
# 在其中创建一个名为'无双'的sheet
sheet1 = book.add_sheet('无双', cell_overwrite_ok=True)
#设置需要保存的信息栏
row0 = ['nickName', 'startTime', 'gender', 'userLevel', 'cityName', 'score', 'content']
#将首行信息写入
for l in range(len(row0)):
sheet1.write(0, l, row0[l])
#对时间进行循环,因为电影上映的时间是9月30号,我们选择从爬取的评论是从10月1号到10月15号(也就是今天)
for day in range(1,16):
print('正在爬取10月{}日的评论'.format(day))
#每天只能爬取前1000条数据,每页15条,因此67次循环之后,便不再有数据可以爬取了
for i in range(67):
print('正在下载第{}页评论'.format(i + 1))
r = get_page('http://m.maoyan.com/mmdb/comments/movie/1217402.json?_v_=yes&offset=' + str(
i*15) + '&startTime=2018-10-{}%2023%3A59%3A59'.format(day))
#判断网页状态码,正常则对数据进行爬取,否则直接退出循环
if r.status_code == 200:
try:
soup = json.loads(r.text)['cmts']
j= 0
#保存数据
for cmt in soup:
j += 1
try:
comment[0] = cmt['nickName']
comment[1] = cmt['startTime']
if cmt.get('gender'):
comment[2] = cmt['gender']
else:
comment[2] = None
comment[3] = cmt['userLevel']
comment[4] = cmt['cityName']
comment[5] = cmt['score']
comment[6] = cmt['content']
except:
break
#写入数据
for k in range(len(comment)):
sheet1.write((day-1)*1005+(i*15+j), k, comment[k])
except:
break
else:
break
#保存文件
book.save(file)
3.3 启动程序
输入以下代码便能完成整个程序的运行:
if __name__ == '__main__':
get_comment()
print('爬取结束')
4 总结与展望
当最后程序完成后,会在根目录下显示 Project_Gutenberg_comment.xls
文件,这时便完成了数据采取工作。值得一提的是,无论是机器学习,还是数据分析,它们的基础便是数据,因此数据的获取至关重要。
这里我们只是简单的获取了猫眼电影移动端每天前1000条评论,并未完整的爬取某一天的全部评论,这一任务可以留作后续我们继续完成。
微信公众号:Python一号通
关注可了解更多的爬虫教程及机器学习内容。
问题或建议,请评论留言
- 分享
- 举报
-
浏览量:2095次2018-10-17 20:17:13
-
浏览量:1892次2018-10-19 18:10:59
-
浏览量:2013次2018-10-16 15:11:27
-
浏览量:3204次2018-10-18 18:19:54
-
浏览量:958次2023-04-04 11:14:12
-
浏览量:998次2023-03-21 10:31:35
-
浏览量:2669次2022-01-28 09:00:30
-
浏览量:6738次2020-12-22 09:37:22
-
浏览量:2102次2018-05-29 12:48:53
-
浏览量:2279次2018-01-20 11:45:49
-
浏览量:1916次2019-01-10 11:08:39
-
浏览量:1901次2018-02-14 21:12:36
-
浏览量:1701次2022-01-04 09:00:39
-
浏览量:3491次2018-01-30 20:21:17
-
浏览量:1824次2019-07-31 14:23:46
-
浏览量:1819次2020-03-26 09:54:32
-
浏览量:4454次2021-06-28 14:10:22
-
浏览量:4338次2021-09-13 13:44:04
-
浏览量:1821次2019-01-21 17:01:12
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
nianqunsh
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明