python网页数据抓取(抓取一下网易云课堂课程数据--提取post关键字 )
优采云 发布时间: 2022-03-24 12:17python网页数据抓取(抓取一下网易云课堂课程数据--提取post关键字
)
写在前面
今天,我们来抓取网易云课堂的课程数据。这个网站中的数据量并不是很大。我们只需要使用请求来快速抓取这部分数据。
你需要做的第一件事是打开所有课程的地址并找出爬虫规则。
地址如下:
简单看了一下,页面数据是基于
这个地址是异步加载的。您需要开发人员工具自己尝试
多次尝试后,以该地址获取的数据为准。
还有一点需要注意,这次是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 门课程
好吧,您需要代码和数据,请发表评论并留下我与您联系的方式。