猫眼电影评论(1366错误)-版本一
import pymysql as pm
import json
import time
import requests
#网页版猫眼只能显示热门短评,只有手机版app才能显示所有评论,所以抓包关键
# 建立数据库
db = pm.connect(host='localhost', user='root', password='123456', db='lianjia')
# 声明游标
cursors = db.cursor()
sql = 'insert into maoyan_data(date,city,score,comment,nick) values(%s,%s,%s,%s,%s)'
for i in range(0,10):
time.sleep(2)
#offset不应该每次递增1次,因为每页有15条短评,而且第二页跟第一页只有一条短评不一样!
url ='http://m.maoyan.com/mmdb/comments/movie/1235560.json?_v_=yes&offset='+ str(i*15)
#这是评论网页地址,1235560是电影白蛇缘起的id
html = requests.get(url).content
#获得内容
data = json.loads(html.decode('utf-8'))['cmts']#获得cmts内的内容
# print(data)
#loads方法是把json对象转化为python对象
for item in data:
tomato=({'date':item['time'].split(' ')[0],'city':item['cityName'],
'score':item['score'],'comment':item['content'],
'nick':item['nick']})#可以帮助忽略index,自动递增
#注意!comment和Nick应该使用utfmd4字符集,因为可能出现表情符号!
params = (tomato["date"], tomato["city"], tomato["score"], tomato["comment"], tomato["nick"])
cursors.execute(sql, params)
# commit是把查询语句提交到数据库内
db.commit()
db.close()
经验:
1.猫眼的网页版只显示极少数热门短评,只有在APP端才能看到所有评论,所以笔者所用的url ='http://m.maoyan.com/mmdb/comments/movie/1235560.json?_v_=yes&offset='+ str(i*15)就是在网上看到别人用的,可以记一下,等到以后学习爬取APP的时候对照
2.offset不应该每次递增1次,因为每页有15条短评,而且第二页跟第一页只有一条短评不一样!刚开始的时候,笔者没有发现这个问题,然后爬取的数据都重复了,之后上网一查才知道还有这种操作,但是改为str(i*15)就可以简单解决这个问题了
3.在mysql中建立表格的时候应该注意,comment和Nick应该长度比较大,特别是comment,而且可能会出现表情,导致程序运行错误((1366, "Incorrect string value: '\\xF0\\x9F\\x8D\\xAC\\xF0\\x9F...' for column 'nick' at row 1")),所以要把comment和Nick的字符集修改为utfmd4,这样就可以把无法识别的表情转换为?
浙公网安备 33010602011771号