zoukankan      html  css  js  c++  java
  • Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    写在前面

    今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了。
    你第一步要做的是打开全部课程的地址,找出爬虫规律,

    地址如下:
    https://study.163.com/courses/

    在这里插入图片描述

    我简单的看了一下,页面数据是基于
    https://study.163.com/p/search/studycourse.json 这个地址进行异步加载的。你自己尝试的时候需要借助开发者工具
    进行多次尝试,抓取到这个地址的数据为准。

    还有一个地方需要注意,这次是post提交方式,并且提交数据是payload类型的,这个原因导致我们的代码和以前的略微有一些不同的地方。

    在这里插入图片描述

    提取post关键字,看一下各个参数的意思,如果你爬取的网站足够多,那么训练出来的敏感度能够快速的分析这些参数

    {"pageIndex":55, # 页码
    "pageSize":50,  # 每页数据大小
    "relativeOffset":2700,
    "frontCategoryId":-1,
    "searchTimeType":-1,
    "orderType":50,
    "priceType":-1,
    "activityId":0,
    "keyword":""   # 搜索相关
    }
    

    好了,可以开始编写代码了,核心的代码就是通过requests模块发送post请求

    def get_json(index):
        print(f"正在抓取{index}页数据")
        payload = {"pageIndex":index,
                "pageSize":50,
                "relativeOffset":50,
                "frontCategoryId":-1,
                "searchTimeType":-1,
                "orderType":50,
                "priceType":-1,
                "activityId":0,
                "keyword":""
        }
        headers = {"Accept":"application/json",
                   "Host":"study.163.com",
                   "Origin":"https://study.163.com",
                   "Content-Type":"application/json",
                   "Referer":"https://study.163.com/courses",
                   "User-Agent":"自己去找个浏览器UA"
        }
        try:
        	# 请注意这个地方发送的是post请求
        	# CSDN 博客 梦想橡皮擦
            res = requests.post("https://study.163.com/p/search/studycourse.json",json=payload,headers=headers)
            content_json = res.json()
            if content_json and content_json["code"] == 0:
                data = get_content(content_json)  # 获取正确的数据
    			
    			############################################
                if len(data) > 0:
                    save_mongo(data)   # 保存数据
               	############################################
    
    
        except Exception as e:
            print("出现BUG了")
            print(e)
        finally:
            time.sleep(1)
            index+=1
            get_json(index)
    
    
    
    def get_content(content_json):
        if "result" in content_json:
            return content_json["result"]["list"]
    
    

    因为获取到的数据是json类型的,所以,数据可以快速的保存到mongodb里面,保存数据的代码我依旧留空,希望你自己可以完善。

    通过很短的时间,我们就捕获到了3000门课程

    在这里插入图片描述

    好了,需要代码和数据,请评论留下我能联系你的方式即可。

  • 相关阅读:
    远程新建分支后,本地查看不到
    Python3之HTMLTestRunner测试报告美化
    Django项目之模型增删改查操作(CRUD)
    Django项目创建数据模型(Model)
    Django项目settings.py文件基础配置
    Django项目如何使用mysql数据库
    Django常用命令介绍
    快捷到处项目依赖包到requirements.txt
    pc 弹窗橡皮筋效果(自己纪录)
    小程序图片上传预览删除(记录)
  • 原文地址:https://www.cnblogs.com/happymeng/p/10242778.html
Copyright © 2011-2022 走看看