• Python爬虫实战,requests+re模块,Python实现爬取豆瓣电影《魔女2》影评


    前言

    闭关几个月,今天为大家带来利用Python爬虫抓取豆瓣电影《魔女2》影评,废话不多说。

    爬取了6月7月25的影片数据,Let’s start happily

    魔女2

    开发工具

    Python版本: 3.6.4

    相关模块:

    requests模块

    json模块

    re模块

    os模块

    pandas模块

    time模块

    以及一些Python自带的模块。

    环境搭建

    安装Python并添加到环境变量,pip安装需要的相关模块即可。

    思路分析

    本文以爬取豆瓣电影《魔女2》影评,讲解如何爬取豆瓣电影《魔女2》评论!

    前期准备

    1.获取页面内容

    # 爬取页面 url
    douban_url = 'https://movie.douban.com/subject/34832354/comments?start=40&limit=20&status=P&sort=new_score'
    # requests 发送请求
    get_response = requests.get(douban_url)
    # 将返回的响应码转换成文本(整个网页)
    get_data = get_response.text
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.分析页面内容,获取我们想要的内容

    • 浏览器中打开我们要爬取的页面
    • 按F12进入开发者工具,查看我们想要的数据在哪里
    • 这里我们只要 评论人+评论内

    豆瓣

    3.利用re模块解析数据

    def get_nextUrl(html):
        """抓取下一个页面的 url"""
    
        try:
            # 找到下一页的 url
            url = html.find('a', 'next').attrs['href']
            # print(url)
            next_start = re.search(r'[0-9]\d{0,5}', url).group(0)
            print("已经到 " + str(next_start) + " 请稍等一会儿\n")
    
            next_url = "https://movie.douban.com/subject/34832354/comments?percent_type=" \
                       "&start={}&limit=20&status=P&sort=new_score&comments_only=1&ck=Cuyu".format(next_start)
            # print(next_url)
    
            return next_url
        except:
            print("到底了~")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    运行结果

    运行结果

    4.代码实现

    def get_html(url):
    
        headers = Agent_info()
        try:
            r = requests.get(url=url, headers=headers, timeout=30)
            r.encoding = r.apparent_encoding
            status = r.status_code   # 爬虫的状态
    
            datas = json.loads(r.text)["html"]
            str_html = "{}".format(datas)
            html = BeautifulSoup(str_html, "html.parser")
    
            print("爬虫状态码: " + str(status))
            # print(type(html))
            return html
        except Exception as e:
            print("数据爬取失败!")
            print(e)
    
    def etl_data(html):
        """提取出我们想要的数据"""
    
        comments = html.find_all('div', 'comment-item')
        # print(comments[0])
    
        datas = []
    
        for span in comments:
            # 短评发表的时间
            times = span.find('span', 'comment-time').attrs['title']
            # 用户名
            name = span.find('a').attrs["title"]
            # 用户评分星级
            try:
                level = span.find('span', 'rating').attrs['class'][0][-2:]
                if (level == '10'):
                    level = "一星"
                elif (level == '20'):
                    level = "二星"
                elif (level == '30'):
                    level = "三星"
                elif (level == '40'):
                    level = "四星"
                elif (level == '50'):
                    level = "五星"
            except Exception as e:
                level = "无评价"
    
            content = span.find('span', 'short').string.strip()
            content = re.sub(r'\n', '', content)
    
            love_point = span.find('span', 'vote-count').string.strip()
    
            arr = [times, name, level, content, love_point]
            datas.append(arr)
    
            df = pd.DataFrame(datas)
            df.columns = ["时间", "用户", "星级", "短评", "支持数"]
    
            # print(arr)
        return df
    
    #代码测试2022.7.25无异常,点赞超过100,更新豆瓣电源爬虫《魔女2》
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    效果展示

    效果展示

  • 相关阅读:
    java-php-net-python-4餐饮管理系统.计算机毕业设计程序
    SQL专项训练-第五天&第六天 (合并)
    【附源码】Python计算机毕业设计融资租赁管理系统
    腾讯云和阿里云4核8G云服务器多少钱一年和1个月费用对比
    工业RFID读写器选择指南
    网络安全70部学员第二阶段项目验收顺利结束
    APP中RN页面热更新流程-ReactNative源码分析
    LCR 172.点名
    48 路径总和 III
    【微服务】SpringCloud微服务剔除下线源码解析
  • 原文地址:https://blog.csdn.net/weixin_43649691/article/details/126017131