(2024)豆瓣电影TOP250爬虫详细讲解和代码

(2024)豆瓣电影TOP250爬虫详细讲解和代码

爬虫目的

获取 https://movie.douban.com/top250 电影列表的所有电影的属性。并存储起来。说起来很简单就两步。

  • 第一步爬取数据
  • 第二步存储

爬虫思路

总体流程图

由于是分页的,要先观察分页的规律,如下很容易知道每一页的规律。

代码思路

  • 函数 getAllPageUrl :生成分页链接列表
  • 函数 getMoiveListByUrl :根据某一页的分页链接,输出电影属性

函数:getAllPageUrl

python 复制代码
def getAllPageUrl():
    """
    通过观察规律,生成所有分页的链接list
    :return:
    """
    list = []
    for i in range(10):
        url = f'https://movie.douban.com/top250?start={i*25}&filter='
        list.append(url)
        # print(url)
    return list

测试代码

python 复制代码
if __name__ == "__main__":
    urlList = getAllPageUrl()
    pprint(len(urlList))
    pprint(urlList)

输出结果

可以一一校验链接是否有效,准确

函数:getMoiveListByUrl

分析dom

js 复制代码
//juery获取一部电影的dom
$("#content .grid_view .item")[0]

OK,经过分析,我们找到了,使用jquery 获取电影dom的方式,只需要经过两步就能拿到电影列表了。

  • 第一步:获取电影列表dom :$("#content .grid_view .item")
  • 第二步:处理单个电影dom,拿到信息。

代码

python 复制代码
def getMoiveListByUrl(url):
    """
    由一个分页链接开始,通dom节点的形式 + 数据处理(正则处理、字符处理、类型转换等), 获取电影信息
    :return: list: 包含每部电影详细信息的字典组成的列表。
    """
    # 定义请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        # 其他需要的请求头...
    }
    movieList = []
    # 发送 GET 请求并获取响应内容
    response = requests.get(url, headers=headers)

    if response.status_code == 200:
        #todo pyquery 解析dom,经过循环,数据处理(正则处理、字符处理、类型转换等),得到正确的电影属性信息
        doc = pq(response.text)
        movie_list_doc = doc("#content .grid_view .item")
        for item in movie_list_doc.items():
            item_dict = {} #存储单个电影对象的字典
            cover = item('.pic img').attr('src')
            movie_url = item('.pic a').attr('href')
            title = item('.info .hd .title:first').text()
            review_count_text = item('.info .bd .star span:contains("人评价")').text()
            rating_num = item('.info .bd .star .rating_num').text()
            review_count = int(review_count_text.replace("人评价", ""))
            item_dict['title'] = title
            item_dict['cover'] = cover
            item_dict['review_count'] = review_count
            item_dict['rating_num'] = rating_num
            item_dict['movie_url'] = movie_url
            # print(title)
            movieList.append(item_dict)

        return movieList
    else :
        return movieList

测试代码

python 复制代码
if __name__ == "__main__":
    pageUrl02 = 'https://movie.douban.com/top250?start=25&filter='
    movieList = getMoiveListByUrl(pageUrl02)
    pprint(movieList)

输出结果

可以一一校验链接是否有效,准确

相关推荐
查理零世42 分钟前
保姆级讲解 python之zip()方法实现矩阵行列转置
python·算法·矩阵
刀客1231 小时前
python3+TensorFlow 2.x(四)反向传播
人工智能·python·tensorflow
sysu632 小时前
95.不同的二叉搜索树Ⅱ python
开发语言·数据结构·python·算法·leetcode·面试·深度优先
SsummerC2 小时前
【leetcode100】从前序与中序遍历序列构造二叉树
python·算法·leetcode
陌北v13 小时前
PyTorch广告点击率预测(CTR)利用深度学习提升广告效果
人工智能·pytorch·python·深度学习·ctr
Мартин.3 小时前
[Meachines] [Easy] Bashed PHP Bash+Python计划任务权限提升
python·php·bash
码界筑梦坊4 小时前
基于Flask的旅游系统的设计与实现
python·flask·毕业设计·旅游
辞落山4 小时前
自定义数据集使用scikit-learn中的包实现线性回归方法对其进行拟合
python·线性回归·scikit-learn
Allen200005 小时前
wow-agent---task4 MetaGPT初体验
人工智能·python·pygame
源代码杀手8 小时前
【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析
windows·python·音视频