豆瓣热门电影爬取

import requests
import json
import csv
def getOnePageData(page):
    start_url = "https://movie.douban.com/j/chart/top_list?"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"
    }
    params = {
        "type": "24",
        "interval_id": "100:90",
        # "action"
        "start": page,
        "limit": 20,
    }
    response = requests.get(start_url, headers=headers, params=params)
    if response.status_code == 200:
        content_json = response.text
        content_list = json.loads(content_json)
        # print(content_dic)
    return content_list
def writeToCsv(data_all):
    with open("D:\practice\douBa.csv", mode="a", encoding="utf-8") as file:
        film_list = csv.writer(file)
        for i in range(80):
            data =data_all[i]
            title = data["title"]
            rate =data["score"]
            types = data["types"]
            film_list.writerow([title, rate, types])

if __name__ == '__main__':
    page = ""
    data_all = []
    for page in range(20, 81, 20):
        data_all = data_all + getOnePageData(page)
    # with open("D:\practice\douBa.csv", mode="a", encoding="utf-8") as file:
    #     film_list = csv.writer(file)
    writeToCsv(data_all)

1.这个和之前的获取的json数据是不一样的,之前遇到的json格式数据是一个对象,以{ } 开始和结束,所以在获取数据时,

content0 = content_dict["mods"]

直接采用字典的方法就可以。
但这次的json数据是一个数组,以[ ]开始和结束

        for i in range(80):
            data =data_all[i]
            title = data["title"]

所以需要先获取到列表里的每一项,在采用字典的方法。
2.在翻页处理时,这是模板。

    for page in range(20, 81, 20):
        data_all = data_all + getOnePageData(page)

3.ValueError: I/O operation on closed file.
这个报错,是因为file变量只在该代码块内有效,使用完毕后会自动关闭i/o流,文件操作处理语句还是要多注意的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值