python爬虫案例(Python爬虫实战)

 2025-08-08 23:39:01  阅读 143  评论 0

摘要:前言今天为大家带来利用Python爬虫抓取豆瓣电影《外太空的莫扎特》影评,废话不多说。Let's start happily开发工具Python版本: 3.6.4相关模块:requests模块json模块re模块os模块bs4模块pandas模块time模块环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。

前言

今天为大家带来利用Python爬虫抓取豆瓣电影《外太空的莫扎特》影评,废话不多说。

Let's start happily

开发工具

Python版本: 3.6.4

相关模块:

requests模块

json模块

re模块

os模块

bs4模块

pandas模块

time模块

环境搭建

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

思路分析

本文以爬取豆瓣电影《外太空的莫扎特》影评,讲解如何爬取豆瓣电影《外太空的莫扎特》影评!

前期准备

1.获取页面内容

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)

2.提取数据

浏览器中打开我们要爬取的页面按F12进入开发者工具,查看我们想要的数据在哪里这里我们需要时间, 用户, 星级, 短评, 支持数
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

3.获取下一个页面url

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/35168646/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("到底了~")

运行结果

4.持久化存储数据代码实现

def save_data(data, fileName, Flag):
    """持久化存储数据"""

    file_name = fileName + "_" + time.strftime("%Y_%m_%d", time.localtime(time.time())) + ".csv"
    # print(file_name)

    data.to_csv(file_name, index=False, header=Flag, mode='a', encoding="utf_8_sig")

    if os.path.exists(file_name):
        print(file_name + " 数据爬取并保存成功!")
    else:
        print('数据保存失败,请再次尝试!')

#代码测试2022.8.8无异常,点赞超过50,更新豆瓣读书Top250

效果展示

版权声明:我们致力于保护作者版权,注重分享,被刊用文章【python爬虫案例(Python爬虫实战)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!;

原文链接:https://www.yxiso.com/zhishi/2030369.html

发表评论:

关于我们
院校搜的目标不仅是为用户提供数据和信息,更是成为每一位学子梦想实现的桥梁。我们相信,通过准确的信息与专业的指导,每一位学子都能找到属于自己的教育之路,迈向成功的未来。助力每一个梦想,实现更美好的未来!
联系方式
电话:
地址:广东省中山市
Email:beimuxi@protonmail.com

Copyright © 2022 院校搜 Inc. 保留所有权利。 Powered by BEIMUCMS 3.0.3

页面耗时0.0342秒, 内存占用1.93 MB, 访问数据库24次

陕ICP备14005772号-15