Python爬虫入门教程 21-100 网易云课堂课程数据抓取

news/2024/7/19 12:42:33 标签: 爬虫, python, json

写在前面

今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用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门课程

在这里插入图片描述

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

1680c132ca4c9b52?w=200&h=200&f=jpeg&s=6401

转载于:https://www.cnblogs.com/happymeng/p/10242778.html


http://www.niftyadmin.cn/n/1788626.html

相关文章

JDBC 查询的三大参数

本文转载至 http://blog.csdn.net/turkeyzhou/article/details/5115228 DBC1.0 、JDBC2.0 、JDBC3.0 中分别用以下方法创建Statement 。 JDBC1.0 : createStatement() JDBC2.0 : createStatement(resultSetType, resultSetConcurrency) JDBC3.0 &#xf…

mac+linux+编译c,mac 下使用gcc 编译c函数

mac 终端其实和window 的cmd类似,由于mac 的os x 采用了unix 系统,所以,各种类似UNIX下的命令都有用。最近在看computer science ,用到了命令行。下面是一个小例子的具体步骤:步骤:创建C文件、用Vim编写C程…

企业级分布式应用服务EDAS _Dubbo商业版_微服务PaaS平台 【EDAS Serverless 运维 创业】...

企业级分布式应用服务EDAS _Dubbo商业版_微服务PaaS平台_分布式框架 - 阿里云https://www.aliyun.com/product/edas?source_typeyqzb_edas_20190110 在创业公司,不懂运维的程序员如何兼顾公司的运维工作-云栖社区-阿里云https://yq.aliyun.com/articles/684954?sp…

linux icmp 时间戳过滤,centos – 使用firewalld阻止ICMP时间戳和时间戳回复

firewalld附带一组默认的预定义ICMP类型,您可以使用它们:# firewall-cmd --get-icmptypesdestination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded timestamp-reply ti…

单片机c语言字符型数据类型,单片机C语言的数据类型

《单片机C语言的数据类型》由会员分享,可在线阅读,更多相关《单片机C语言的数据类型(3页珍藏版)》请在人人文库网上搜索。1、单片机C语言的数据类型在最小系统的介绍中,我们已经大致了解了单片机的程序结构,下面我们来系统介绍一下…

codeforces round506(div3)A. Many Equal Substrings

又是一道有点坑的A题。这道题要找出最长的前缀等于后缀&#xff0c;然后输出这个前缀和k个前缀的互补串 #include<bits/stdc.h> using namespace std; string t; int main() {int n,k;scanf("%d%d",&n,&k);cin>>t;int i;for(i1;i<n;i){string…

C语言字符型变量sex,2015年计算机二级《C语言》精选练习题及答案(6)

1[简答题]下列给定程序中函数fun的功能是&#xff1a;将P所指字符串中的所有字符复制到b中&#xff0c;要求每复制三个字符之后插入一个空格。例如&#xff0c;若给a输入字符串&#xff1a;“ABCDEFGHIJK”&#xff0c;调用函数后&#xff0c;字符数组b中的内容为&#xff1a;“…

ArcFaceDemo 第二版【C#】——视频人脸识别

啥话不说&#xff0c;不用跪求&#xff0c;直接给下载地址&#xff1a;http://common.tenzont.com/comdll/arcface2demo.zip&#xff08;话说附件的大小不限制&#xff0c;还是说我的文件太大&#xff0c;实际上确实有点大&#xff0c;60M&#xff09;。几点说明&#xff1a;1.…