猫眼电影评论(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,这样就可以把无法识别的表情转换为?

原文地址:https://www.cnblogs.com/fodalaoyao/p/10435702.html