欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-24 12:32:34
写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用 就可以快速的抓取到这部分数据了。 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下: https://study.163.com/courses/ 我简单的看了一下,页面数据是基于 这个地址进行异 ......

写在前面

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

地址如下:

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

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

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

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

提取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门课程

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

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

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