(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)

输出结果

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

相关推荐
默_笙1 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_426003961 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫1 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技1 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读1 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时1 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
奇思妙想聪明勤奋的小羊1 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1231 天前
2026年第38周GitHub趋势周报
python·科技·github
IZero071 天前
Jev 与 Laya
python·语言模型