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

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159

    作业要求:

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

    参考:


    32个Python爬虫项目


    都是谁在反对996?


    Python和Java薪资最高,C#最低!


    给《流浪地球》评1星的都是什么心态?


    《都挺好》弹幕数据,比剧情还精彩?


    爬了自己的微信好友,原来他们是这样的人……

    春节人口迁徙大数据报告!

    七夕前消费趋势数据

    爬了一下天猫上的Bra购买记录,有了一些羞羞哒的发现...

    Python做了六百万字的歌词分析,告诉你中国Rapper都在唱些啥

    分析了42万字歌词后,终于搞清楚民谣歌手唱什么了

    十二星座的真实面目

    唐朝诗人之间的关系到底是什么样的?

    中国姓氏排行榜

    三.爬虫注意事项

    1.设置合理的爬取间隔,不会给对方运维人员造成压力,也可以防止程序被迫中止。

    • import time
    • import random
    • time.sleep(random.random()*3)

    2.设置合理的user-agent,模拟成真实的浏览器去提取内容。

    1. 首先打开你的浏览器输入:about:version。
    2. 用户代理:
    3. 收集一些比较常用的浏览器的user-agent放到列表里面。
    4. 然后import random,使用随机获取一个user-agent
    5. 定义请求头字典headers={’User-Agen‘:}
    6. 发送request.get时,带上自定义了User-Agen的headers

    3.需要登录

    发送request.get时,带上自定义了Cookie的headers

    headers={’User-Agen‘:  

    'Cookie':    }

    4.使用代理IP

    通过更换IP来达到不断高 效爬取数据的目的。

    headers = {

        "User-Agent": "",

    }

    proxies = {

        "http": " ",

        "https": " ",

    }

    response = requests.get(url, headers=headers, proxies=proxies)

     1 # 获取数据,根据url获取
     2 def get_data(url):
     3     headers = {
     4 
     5         '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'
     6     }
     7     req = request.Request(url, headers=headers)
     8     response = request.urlopen(req)
     9     if response.getcode() == 200:
    10         return response.read()
    11     return None

    爬虫主题:分析电影《新喜剧之王》是否有看点

    剧情简介:

           大型影视基地,胸怀明星梦的女子如梦(鄂靖文 饰)已经在影视圈摸爬滚打了十多年,却依旧还是籍籍无名的龙套演员。平日里,在片场饱受剧组和其他演员的欺凌嘲笑,回到家则被恨铁不成钢的老爹指责,甚至扬言断绝父女关系。然而如梦一律微笑面对,天大的委屈也藏在心中,死皮赖脸地抓住每一个希望渺茫的机会。在此期间,她结识了热衷于跑龙套的李洋,早已过气却自视甚高的童星马可(王宝强 饰),更彻彻底底看清了自己以及爱情的真相。 
      她是过于平凡的小人物,是一个不该有梦的女孩,是一个直到宇宙灭亡也永远不会得到演戏机会的可悲龙套……

    爬取对象:

    https://maoyan.com/films/580298

    爬取代码(本次爬取了评论中用户ID、用户名、用户所在城市、用户评论、评分分数、评论时间。):

     1 def get_data(url):
     2     headers = {
     3         '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'
     4     }
     5     req = request.Request(url, headers=headers)
     6     response = request.urlopen(req)
     7     if response.getcode() == 200:
     8         return response.read()
     9     return None
    10 
    11 #处理接口返回数据
    12 
    13 def parse_data(html):
    14     data = json.loads(html)['cmts']  # 将str转换为json
    15     for item in data:
    16         comment = {
    17             'id': item['id'],
    18             'nickName': item['nickName'] if 'nickName' in item else '',  # 处理nickName不存在的情况
    19             'cityName': item['cityName'] if 'cityName' in item else '',  # 处理cityName不存在的情况
    20             'content': item['content'].replace('
    ', ' ', 10),  # 处理评论内容换行的情况
    21             'score': item['score'],
    22             'startTime': item['startTime']if 'startTime' in item else ''
    23         }
    24         comments.append(comment)
    25     return comments
    26 
    27 if __name__ == '__main__':
    28     for d in range(10):
    29         for i in range(40):
    30             comments = []
    31             html = get_data('http://m.maoyan.com/mmdb/comments/movie/580298.json?_v_=yes&offset={}&startTime=2019-03-{}%2022%3A25%3A03'.format(i*15, d))
    32             comments = parse_data(html)
    33             for item in comments:
    34                 with open('film_criticisms.txt', 'a', encoding='utf-8') as f:
    35                     f.write(str(item['id']) + '	' + item['cityName'] + '	' + item['nickName'] + '	' + item['content'] + '	' + str(item['score']) + '	' +
    36                             item['startTime'] + '
    ')
    37             print('爬取第{}页'.format(i))
    38             print(comments)

    爬取结果:

    数据分析:

    获取用户评论中热词 

     1 comments = []
     2 with open('film_criticisms.txt', mode='r', encoding='utf-8') as f:
     3     rows = f.readlines()
     4     for row in rows:
     5         try:
     6             comment = row.split('	')[3]
     7             if comment != '':
     8                 comments.append(comment)
     9         except:# 预防出现list[index]的index超出范围的情况
    10             print('这一条有误:'+ comment)
    11             continue
    12 
    13 
    14 
    15 
    16 
    17 
    18 pl = ' '.join(comments)
    19 print(' '.join(comments))
    20 
    21 ci = ['', ' ', '我们', '知道', '看到', '自己', '起来', '什么', '他们', '一个', '看着', '没有', '看看', '就是', '怎么', '还是', '这么', '觉得', '电影']
    22 
    23 for c in ci:
    24         myText = pl.replace(c, "")
    25 
    26 '''分割出词汇'''
    27 words = list(jieba.cut(myText))
    28 wordDict = {}
    29 
    30 '''统计频率次数'''
    31 wordSet = set(words)
    32 for w in wordSet:
    33     if len(w) > 1:
    34         wordDict[w] = words.count(w)
    35 
    36 '''排序'''
    37 wordList = list(wordDict.items())
    38 wordList.sort(key=lambda x: x[1], reverse=True)
    39 
    40 '''输出top20'''
    41 for i in range(20):
    42     print(wordList[i])

    结果如下:

     

    生成词云(由于无法导入imread包,因此我将数据放至wordart描绘词云):

     1 import matplotlib.pyplot as plt
     2 from wordcloud import WordCloud
     3 from scipy.misc import imread
     4 
     5 
     6 wc =WordCloud(background_color="white", mask=imread('xiju.jpg'), max_words=2000,font_path="C:WindowsFontssimkai.ttf",
     7               max_font_size=60, random_state=30)
     8 myWord = wc.generate(pl)
     9 wc.to_file('result.jpg')
    10 plt.imshow(myWord)
    11 plt.axis("off")
    12 plt.show()

    词云生成地址:https://wordart.com/create

    词云如下:

                            原图:                                         词云显示图:

      

    完整代码:

    总结:

    • 《新喜剧之王》极具周星驰以往所释演的角色的风格,主角从一个不起眼、被欺负、被凌辱的小人物到实现理想的褪变。但与以往又有所不同,片中每次引发我们开怀大笑的背后,隐藏着一个又一个的辛酸的真实故事。
    • 这部片把社会的丑恶拼凑成一盘菜,拍的太真实,没有了以前那种天马行空的感觉,搞笑也没那么多,更多的是在表达小人物的艰辛,跟全世界的人都看不起你,打击你的时候,只有你的父母是真正关心你的人。
    • 希望观影的观众能够真正去理解这一部电影要解释的内容,而非一味的寻找笑点。
  • 相关阅读:
    [Python学习之路] 猜大小游戏
    C语言学生成绩管理系统(简易版)
    malloc动态分配字符串数组“ 一个月内的提醒”
    结构体指针排序
    C语言结构体排序
    数据测压,数据库查询,修改,添加
    badboy脚本录制
    性能测试
    JDK开发环境搭建及环境变量配置(win10)Jmeter之安装和配置
    Charles 修改返回值response(方法 breakpoints)
  • 原文地址:https://www.cnblogs.com/Aliuyu/p/10805214.html
Copyright © 2011-2022 走看看