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个表,展开:

用这个数据做两个图:分文理科

有了这个方法,我们就可以用来抓取院校、专业的分数线,大家可以自己尝试一下。

(0)

相关推荐