鱼C论坛

 找回密码
 立即注册
查看: 865|回复: 5

大佬们17,36,47,报错,说是subject_collection_items:关键错误:“主题收集项目”

[复制链接]
发表于 2018-9-7 15:51:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#coding=utf-8
import requests
import json

class doubanspider:
    def __init__(self):
        self.url_temp_list =[
                             {"url_temp":"https://m.douban.com/rexxar/api/v2/subject_collection/filter_tv_american_hot/items?start={}&count=18&loc_id=108288",
                              "country":"US"
                              },
                             {"url_temp":"https://m.douban.com/rexxar/api/v2/subject_collection/filter_tv_domestic_hot/items?start={}&count=18&loc_id=108288",
                              "country": "UK"
                            },
                            {
                                "url_temp":"https://m.douban.com/rexxar/api/v2/subject_collection/filter_tv_animation_hot/items?start={}&count=18&loc_id=108288",
                                "country": "AC"
                            }
                             ]
        self.headers={"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36"}

    def parse_url(self,url):#发送请求,响应请求
        print(url)
        response =requests.get(url,headers=self.headers)
        return response.content.decode()

    def get_content_list(self,json_str):#提取数据
        dict_ret = json.loads(json_str)#json转换成python类型
        content_str = dict_ret["subject_collection_items"]                              #17
        total = dict_ret["total"]
        return content_str,total

    def save_content_list(self,content_list,country):
        with open("douban.txt","a",encoding="utf-8") as  f:
            for content in  content_list:
                content["country"] = country
                f.write(json.dumps(content,ensure_ascii=False))
                f.write("\n")
        print("保存成功")
    def run(self):#实现主要逻辑
        for url_temp in self.url_temp_list:
            num =0 #当前页码数
            total = 100#假设有第一页
            while num<total+18:
            #1.start_url 开始地址
                url =url_temp["url_temp"].format(num)
            #2.发送请求,响应请求
                json_str = self.parse_url(url)  #得到响应字符串
            #3.提取数据
                content_list,total = self.get_content_list(json_str)                   #36
            #4.保存
                self.save_content_list(content_list,url_temp["country"])
                # if len(content_list)<18:
                #     break
            #5.构造下一页的url,进入循环
                num +=18

if __name__ == '__main__':
    douban_spider = doubanspider()
    douban_spider.run()                #46

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 15:56:20 | 显示全部楼层
你的 dict_ret字典没有"subject_collection_items"这个键。你可以打印dict_rect
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 15:59:22 | 显示全部楼层
塔利班 发表于 2018-9-7 15:56
你的 dict_ret字典没有"subject_collection_items"这个键。你可以打印dict_rect

老哥这个怎么解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 16:12:54 | 显示全部楼层
焰虎 发表于 2018-9-7 15:59
老哥这个怎么解决

请大神来看,json几乎没看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 23:51:21 | 显示全部楼层
在你的第17行写上
print(json_str)

如果能成功获取到json数据,
就在第18行写上
print(dict_ret.keys())

看一下有没有“subject_collection_items”这个键名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-8 10:03:22 | 显示全部楼层
requests自带json,
def parse_url(self,url):#发送请求,响应请求
        print(url)
        response =requests.get(url,headers=self.headers)
        return response.content.decode()
可以改成
    def parse_url(self,url):#发送请求,响应请求
        print(url)
        response =requests.get(url,headers=self.headers)
        return response.json()
直接返回字典
这样就不用解析json了
看你的json数据是这样的
{'msg': 'invalid_request_1284', 'code': 1287, 'request': 'GET /rexxar/v2/subject_collection/filter_tv_domestic_hot/items', 'localized_message': ''}
里面没有你要的"subject_collection_items"键
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表