zoukankan      html  css  js  c++  java
  • 爬虫综合大作业

    本次作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159

    可以用pandas读出之前保存的数据:newsdf = pd.read_csv(r'F:duymgzccnews.csv')

    一、把爬取的内容保存到数据库

    • 保存到sqlite3数据库
    import sqlite3
    with sqlite3.connect('newsdb.sqlite') as db:
        newsdf.to_sql('gzccnewsdb',con=db, if_exists='replace')
    
    with sqlite3.connect('newsdb.sqlite') as db:
        df = pandas.read_sql_query('SELECT * FROM gzccnewsdb',con=db)#查询

    截图:

    • 保存到MySQL数据库
    import pymysql
    from sqlalchemy import create_engine
    conn = create_engine('mysql+pymysql://root:@localhost:3306/gzccnews?charset=utf8',encoding='utf-8')
    newsdf.to_sql(name ='gzccnews', con = conn, if_exists = 'append', index = False)

    截图:

      • 在MySQL中新建数据库

      • 导入数据库成功

     

    二、爬虫综合大作业

    1. 选择一个热点或者你感兴趣的主题。
    2. 选择爬取的对象与范围。
    3. 了解爬取对象的限制与约束。
    4. 爬取相应内容。
    5. 做数据分析与文本分析。
    6. 形成一篇文章,有说明、技术要点、有数据、有数据分析图形化展示与说明、文本分析图形化展示与说明。
    7. 文章公开发布。
    • 爬虫主题:分析电影《何以为家》好不好看

    主要内容:法庭上,十二岁的男孩赞恩向法官状告他的亲生父母,原因是,他们给了他生命。故事中,赞恩的父母在无力抚养和教育的状况下依然不停生育,作为家中的长子赞恩,弱小的肩膀承担了无数生活的重压。当妹妹被强行卖给商贩为妻时,赞恩愤怒离家,之后遇到一对没有合法身份的母子,相互扶持勉强生活。然而生活并没有眷顾赞恩,重重磨难迫使他做出了令人震惊的举动……

     

    • 爬取对象:猫眼电影(https://maoyan.com/)

     

    • 爬取对象的限制与约束:猫眼电影的web版关于电影的评论是有限的,不允许获取所有用户的评论,最终发现要在手机终端的页面才可以获得

     

    图1  web版不能获得所有评论

    图2  手机版可以获得所有评论

    • 爬取内容

    本次爬取了评论部分的用户ID、所在城市、用户名、评论、评分、时间六项,共爬取了13778条评论。

    找到爬取的json数据切入口:http://m.maoyan.com/mmdb/comments/movie/1218727.json?_v_=yes&offset=0&startTime=2019-05-03%2022%3A25%3A03

     

     爬取代码如下:

    from urllib import request
    import json
    
    
    # 获取数据,根据url获取
    def get_data(url):
        headers = {
            '1': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Mobile Safari/537.36',
            '2': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1',
            '3': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'
        }
        req = request.Request(url, headers=headers)
        response = request.urlopen(req)
        if response.getcode() == 200:
            return response.read()
        return None
    
    
    def parse_data(html):
        data = json.loads(html)['cmts']  # 将str转换为json
    
        for item in data:
            comment = {
                'id': item['id'],
                'nickName': item['nickName'] if 'nickName' in item else '',
                'cityName': item['cityName'] if 'cityName' in item else '',  # 处理cityName不存在的情况
                'content': item['content'].replace('
    ', ' ', 10),  # 处理评论内容换行的情况
                'score': item['score'],
                'startTime': item['startTime']if 'startTime' in item else ''
            }
            comments.append(comment)
        return comments
    
    if __name__ == '__main__':
        for d in range(14):
    
            for i in range(30):
                comments = []
                html = get_data('http://m.maoyan.com/mmdb/comments/movie/1218727.json?_v_=yes&offset={}&startTime=2019-06-{}%2022%3A25%3A03'.format(i*15,d))
                comments = parse_data(html)
                # df = pd.DataFrame(comments)
                for item in comments:
                    with open('pinglun.csv', 'a', encoding='utf-8') as f:
                        f.write(str(item['id']) + ';' + item['cityName'] + ';' + item['nickName'] + ';' + item['content'] + ';' + str(item['score']) + ';' +
                                item['startTime'] + '
    ')
                print('爬取中。。。')
                print(comments)

    爬取结果:

    • 进行数据分析如下

     1、获取用户评论中热词Top20,并且制作词云

    代码如下:

    import jieba
    import pandas as pd
    
    comments = []
    with open('p.txt', mode='r', encoding='utf-8') as f:
        rows = f.readlines()
        for row in rows:
            comment = row.split(';')[3]
            if comment != '':
                comments.append(comment)
    
    pl=' '.join(comments)
    print(' '.join(comments))
    
    ci=['',' ','我们','知道','看到','自己','起来','什么','他们','一个','看着','没有','看看','就是','怎么','还是','这么','觉得','电影']
    
    for c in ci:
            mytext = pl.replace(c, "")
    
    '''分割出词汇'''
    words = list(jieba.cut(mytext))
    wordDict={}
    
    '''统计频率次数'''
    wordSet=set(words)
    for w in wordSet:
        if len(w)>1:
            wordDict[w] = words.count(w)
    
    '''排序'''
    wordList = list(wordDict.items())
    wordList.sort(key=lambda x:x[1],reverse=True)
    
    '''输出top20'''
    for i in range(20):
        print(wordList[i])
    
    '''保存为csv文件'''
    pd.DataFrame(data=wordList).to_csv('ciyun.csv',encoding='utf-8')

     运行截图如下:

    词云显示如下:

    2、分析电影评分情况

    代码如下:

    pf = []
    with open('p.txt', mode='r', encoding='utf-8') as f:
        rows = f.readlines()
        for row in rows:
            fenCol = row.split(';')[4]
            if fenCol != '':
                pf.append(fenCol)
    
    pfDict={}
    '''统计频率次数'''
    Set=set(pf)
    for w in Set:
            pfDict[w] = pf.count(w)
    
    '''排序'''
    List = list(pfDict.items())
    List.sort(key=lambda x:x[1],reverse=True)
    
    '''输出'''
    for key in List:
        print(key)
    
    
    from pyecharts import Pie
    pie=Pie("《何以为家》评分占比",width=1000)
    pie.add('评分情况',['0分','0.5分','1分','1.5分','2分','2.5分','3分','3.5分','4分','4.5分','5分'], [1,12,3,4,4,7,6,18,57,153,629], center=[75, 50], is_random=True,is_legend_show=False, is_label_show=True)
    pie.render('.粉丝评分图.html')

    运行截图如下:

    评分情况可视化如下:

    • 总结

    经过对猫眼电影上《何以为家》这部电影的部分评论的爬取、分析、数据可视化之后,从中我们可以知晓:

    1、电影的主题是围绕家庭中父母和孩子的关系展开的;

    2、通过对观众评论的分析得知,电影主要给人以生活化、真实的感觉;

    3、通过对评分的分析,可以看出总体评分还是非常非常高的,给5分的观众占了大多数,对得起猫眼9.4的评分(2019.5.6);

    4、值得一看。

  • 相关阅读:
    HTTP状态码
    HTTP详解教程 / HTTP 响应头信息 HTTP 响应头信息
    HTTP请求方法
    HTTP 消息结构
    HTTP 简介
    Session 工作原理
    CSS 布局
    css float 浮动
    CSS 布局
    css position定位
  • 原文地址:https://www.cnblogs.com/sanshuishu/p/10775570.html
Copyright © 2011-2022 走看看