6.parsel+css定位数据并获取豆瓣电影top250-测试

import requests
import parsel
import csv

# 创建文件对象
f = open("0821_top250.csv", "a", encoding="utf‑8‑sig", newline="")
csv_writer = csv.DictWriter(f, [
            "电影名",
            "导演",
            "主演",
            "年份",
            "国家",
            "类型",
            "评分",
            "简介",
            "详情页"
    ]
)

# 写入表头
csv_writer.writeheader()
# 翻页获取1-10页数据
for page in range(10):
    print(f"正在爬取第{page+1}页的数据.......")
    start_num = page * 25
    url = f'https://movie.douban.com/top250?start={start_num}&filter='
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36"
    }
    # 发送请求
    response = requests.get(url=url,headers=headers,verify=False)
    # print(response.text)
    # 转成可解析对象
    selector = parsel.Selector(response.text)

    # 获取所有电影数据标签
    lis = selector.css(".grid_view li")

    # for循环遍历,把列表里的元素一个一个取出来
    for li in lis:
        """
        .hd a span:nth-child(1)::text --> 提取标签class类名为hd下面a标签下面第一个span标签里面文本数据 
        .hd --> class类名为hd标签
        a --> a 标签
        get()  --> 提取第一个标签数据:返回字符串
        getall() --> 提取所有标签数据:返回列表
        strip() --> 字符串方法,去除左右两端空格
        split() --> 字符串方法,以某个字符串作为分割,反馈列表
        replace() --> 字符串方法,替换
        """
        title = li.css(".hd a span:nth-child(1)::text").get()  # 电影名
        info_list = li.css(".bd p:nth-child(1)::text").getall() # 电影信息
        director = info_list[0].strip().split("   ")[0].replace("导演: ","").split(" ")[0]  # 导演
        actor = info_list[0].strip().split("   ")  # 主演
        actor1 = info_list[0].strip().split("   ")[1].replace("主演: ","").split(" ")[0] if len(actor) > 1 else ""
        year = info_list[1].strip().split(" / ")[0] # 年份
        country = info_list[1].strip().split(" / ")[1]  # 国家
        movie_type = info_list[1].strip().split(" / ")[2]  # 类型
        score = li.css(".rating_nums, .rating_num::text").get()  # 评分
        intro = li.css(".quote span::text").get()  # 简介
        link = li.css(".hd a::attr(href)").get()  # 详情页链接地址

        data_dict = {
            "电影名": title,
            "导演": director,
            "主演": actor1,
            "年份": year,
            "国家": country,
            "类型": movie_type,
            "评分": score,
            "简介": intro,
            "详情页": link
        }
        # print(info_list[1])
        # print(title,director,actor,year,country,movie_type,score,intro,link)
        csv_writer.writerow(data_dict)
        print(data_dict)
f.close()

"""
https://movie.douban.com/top250 或 https://movie.douban.com/top250?start=0&filter=   第1页
https://movie.douban.com/top250?start=25&filter=  第2页
https://movie.douban.com/top250?start=50&filter=  第3页
"""

image

posted @ 2026-08-21 17:37  無心的Man  阅读(5)  评论(0)    收藏  举报