zoukankan      html  css  js  c++  java
  • Python爬虫学习笔记(八)——智高考数据爬取

    介绍

    智高考是一个高考志愿网站,也是基于Ajax的。高中的时候我在wyz大神的帮忙下,尝试过爬取信息来为填志愿做准备。但是当时没有系统学习过爬虫,几乎都是靠大神带飞,因此今天再次尝试爬取智高考的大学信息。(数据全部基于智高考,侵删)
    该网站有多种查询模式,我打算爬取的有两种。
    1.各省份的本科大学
    2.各学科的本科大学

    正文

    各省份的本科大学

    首先分析Ajax,可以看到URL为:

    http://www.zhigaokao.cn/university/getRemoteUniversityList.do?userKey=www&req=ajax&universityName=&areaid=110000&type=&educationLevel=1&property=&offset=0&rows=10
    

    其中universityName、type、property均可省略,因为我们没有传入数据。然后通过字面翻译可以知道,areaid是地区代码的意思,也就是代表着各个省份(直辖市)。这里可以选择网上搜索所有省份代码,预处理弄好,这也是我曾经的做法。但是今天我打算直接从网站上爬取所有省份代码。
    直接刷新界面,可以看到有好几条xhr信息,仔细观察就能发现其中一条就是存着省份代码的信息。

    接下来事情就简单了,用requests读取信息,然后解析就可以了,代码如下

    def get_id():
    	url = 'http://www.zhigaokao.cn/university/getRemoteProvinceList.do?'
    	payload = {
    			'userKey': 'www',
    			'req': 'ajax',
    		}
    	response = requests.get(url, headers=headers, params=payload)
    	items = response.json().get('bizData')
    	IDs = []
    	for item in items:
    		IDs.append(item.get('id'))
    	return IDs
    

    获取省份代码之后,就可以传入之前的params中,通过offset来爬取所有信息。

    各学科的本科大学

    这里比较麻烦的如何传递专业。按照智高考的专业分级有三级,因此我打算一二级用文件夹的形式存,三级作为文件的命名。总的思路和上面的类似,就不细细赘述了。我遭遇到的主要问题就是json结构层次太多,经常会搞晕,然后我没有一开始定下怎么按层次解析,因此踩了不少坑。说到底应该算是基础不扎实、代码量太少的原因吧。

    还有要提及的一点是,我本打算先爬取所有专业大类存在list里,然后发现这样和最后的学校不容易匹配上,发现最终的json中其实也有专业大类的名称,因此又重新修改了代码,改为直接解析学校的URL。

    总结

    通过这次实践,解决了曾经遗留的一些问题,也搞清楚如何解决Ajax的问题了。不过也发现了一些还不够的地方。一个是事先对代码的结构没有考虑清楚,导致多次重构代码,浪费了不少时间;另一个是python基础不够扎实,对list之类的基本数据结构运用的不熟练。
    本次实践代码开源在github

  • 相关阅读:
    对象的强、软、弱和虚引用
    spark运行模式之一:Spark的local模式安装部署
    Spark Tungsten in-heap / off-heap 内存管理机制--待整理
    sparkContext之一:sparkContext的初始化分析
    mysql分区表之四:分区表性能
    服务的升级和降级
    怎样编写高质量的 Java 代码
    Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
    Spark Streaming之六:Transformations 普通的转换操作
    Spark Streaming之五:Window窗体相关操作
  • 原文地址:https://www.cnblogs.com/HackHarry/p/9610096.html
Copyright © 2011-2022 走看看