python爬取全国标准信息平台
前言
目标网页
帮大地做个毕业论文的数据爬取,粗略看了一下,不用注册填写表单但是是动态加载页面的,不知道有无反爬的机制,那就直接上python一探究竟。
解决问题
将上面的各个省地方标准的相关资料都爬到xlsx上。
解决动态加载页面
一开始很困惑啊,怎么首页明明谷歌F12里面能找到的,get下来的数据里面没有啊?
后来又回去看看教程,一般出现这种情况是因为这种网页是用JS加载部分资源的,所以直接get该页面看不见JS的具体资源。想要验证的同学可以到谷歌商店下一个插件名叫Toggle JavaScript,它可以禁用JS,如果禁用后你想爬的数据消失了,那么就证明了该页面是动态页面.解决方法有两个:
1.手动去找你要的文件的地址
2.用selenium
这次用方法1解决了,所以也没有用到2.下面讲一讲如何实现1的。
我用的是chrom,先说明一下。在目标页面按F12,打开控制台。跳转到Networ的XHR标签。然后刷新一下页面。会发现加载了一些文件出来,我这个首页就一个文件,省的我去找了.如果有多个文件,可以依次访问他们,看看哪个是自己需要的。
点进去一看,哦吼,这不就是一个json吗,要的资料都在了,看一下url
pageSize代表当前页面显示多少,pageNumber代表当前页数,如果要都访问遍历页数即可
下面直接贴代码了
1 | #注意网页是动态加载数据 |
因为我是要写到xlsx里面去,所以调了一个openpyxl的库
反爬
爬了一下发现,一直在中途就报错1
2warning 10060
主机无法访问
自己手动访问又没问题,那就是反爬机制了。
解决的方法就是用while加上try去get,一共循环100次,如果访问到了退出循环,没访问到停顿随机的时间,然后重新访问。注意timeout要写,有些时候它不报错,但是就是一直卡在那儿,所以要设置一个时限.
具体都写在上面的代码里了
注意
这个json的资源有些地方会有空白,比如访问[‘TRADE_CLASSIFIED’]的时候,偶尔一两个会报错,去看的时候发现的确没有这个key,原因是有些行业的分类是无,他就有些不写了,这地方要注意一下。