Power Query 网络抓取POST案例:历年各省分数线抓取
#学浪2020#
高考倒计时4天,首先预祝考生们不紧张,考出理想成绩,等到考完试分数出来时大家就要关心高考志愿填报的问题了,记得去年有一个网站抓取过分数线的数据,我找出来再试试,结果不好用了。去年抓取的时候直接找到真实的网址,就可以直接定义函数抓取,很方便。
不过网络抓取就是这样,网站服务器端稍作改动,之前的方法就有可能失效,要重新来分析网站,找到新的方法。
网站分析
记得去年抓取时也是这样的地址,也是POST,不过不需要定义复杂的函数,直接url就可以抓。
今年的查询下面多了一个request payload:
实际上虽然有access_token但是是个空值,并不起作用,所以我们可以尝试用POST的方式抓取数据。
定义函数
我们需要用三个参数来控制抓取:
- p:页码
- pid:省级行政区划代码
- y:年份
这里要注意的就是这一句:因为是POST查询要有#"Content-Type"
headers=[#"Content-Type"="application/json;charset=UTF-8",Cookie=""],
headers=[#"Content-Type"="application/json;charset=UTF-8",Cookie=""],
还有就是查询条件的写法:
query=[access_token="",page=Text.From(p),province_id=Text.From(pid),size="20",uri="apidata/api/gk/score/proprovince",year=Text.From(y)],
query=[access_token="",page=Text.From(p),province_id=Text.From(pid),size="20",uri="apidata/api/gk/score/proprovince",year=Text.From(y)],
加Text.From函数就是为了方便,不然要做类型转换。
说一下pid的获取,总不能一个省份一个省份的点击页面来查看吧,看这个JSON:
直接拷贝过来就可以用了,顺便把年份也取过来了。
试抓
直接出结果,这个是二进制文件,用JSON解析一下就可以了
展开之后是这样的:
抓取
不建议大家直接全部省份,全部年份的去抓,会被服务器屏蔽,只抓取你感兴趣的就可以了:
我是只抓取了辽宁省的数据,就是5个表,展开:
用这个数据做两个图:分文理科
有了这个方法,我们就可以用来抓取院校、专业的分数线,大家可以自己尝试一下。