爬虫再探实战(四)———爬取动态加载页面——请求json
还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息。
第一步,检查元素,看图如下:

过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造requests请求对象,然后解析json文件啦。源码如下:
import requests def save(school_datas):
for data in school_datas:
# print(data)
year = data['year']
province = data['province']
type = data['type']
bath = data['bath']
score = data['score']
print(province, year, type, bath,score ) for i in range(1, 34):
print("第%s页====================="%str(i))
# url = "http://data.api.gkcx.eol.cn/soudaxue/queryProvince.html?messtype=jsonp&url_sign=queryprovince&province3=&year3=&page=1&size=100&luqutype3=&luqupici3=&schoolsort=&suiji=&callback=jQuery1830426658582613074_1469201131959&_=1469201133189"
data = requests.get("http://data.api.gkcx.eol.cn/soudaxue/queryProvince.html", params={"messtype":"json","url_sign":"queryprovince","page":str(i),"size":"50","callback":"jQuery1830426658582613074_1469201131959","_":"1469201133189"}).json()
print("每一页信息条数——>", len(data['school']))
print("全部信息条数——>", data["totalRecord"]['num'])
school_datas = data["school"]
save(school_datas)
简单说明一下params部分,大部分是从json文件网址中截取信息构造,其中size参数是一个页面返回的信息数量,可调节大小,网站一般有限制,这里是50(就算size超出50的话也是返回50条);page,就是字面意思啦,这里从1请求到33为止,33由int(1640/50) + 1)得到,1640是信息总条数。此外,params还可以设置其他参数来具体指定省份时间等。
最重要的,在同样的网速下,这个程序不仅简单,而且,3s左右就可以输出全部结果(这里只是输出,没有保存),效率高出模拟登陆不是一点啊。。。
关于动态加载网页的抓取先到这里告一段落,之后打算简单学习一下JS相关的知识再来总结一下。
最后感谢群里面两位大牛的指点,@南京-天台@四川-Irony。
爬虫再探实战(四)———爬取动态加载页面——请求json的更多相关文章
- Python+Selenium爬取动态加载页面(2)
注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
- 爬虫再探实战(三)———爬取动态加载页面——selenium
自学python爬虫也快半年了,在目前看来,我面临着三个待解决的爬虫技术方面的问题:动态加载,多线程并发抓取,模拟登陆.目前正在不断学习相关知识.下面简单写一下用selenium处理动态加载页面相关的 ...
- Scrapy 框架 使用 selenium 爬取动态加载内容
使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...
- C#使用phantomjs,爬取AJAX加载完成之后的页面
1.开发思路:入参根据apiSetting配置文件,分配静态文件存储地址,可实现不同站点的静态页生成功能.静态页生成功能使用无头浏览器生成,生成之后的字符串进行正则替换为固定地址,实现本地正常访问. ...
- ExtJS 4.1 TabPanel动态加载页面并执行脚本【转】
ExtJS 4.1 TabPanel动态加载页面并执行脚本 按照官方示例,可以动态加载页面,可是脚本不执行,于是查SDK.google,发现scripts需要设置为true,于是设置该属性,整个代码如 ...
- 记录Js动态加载页面.append、html、appendChild、repend添加元素节点不生效以及解决办法
今天再优化blog页面的时候添加了个关注按钮和图片,但是页面上这个按钮和图片时有时无,本来是搞后端的,被这个前端的小问题搞得抓耳挠腮的! 网上各种查询解决方案,把我解决问题的艰辛历程分享出来,希望大家 ...
- div动态加载页面
div动态加载页面 /* /// method 1 var url="<%=basePath%>/qne.do?p=pessegerCountSet"; $.post( ...
- Python 爬虫实例(8)—— 爬取 动态页面
今天使用python 和selenium爬取动态数据,主要是通过不停的更新页面,实现数据的爬取,要爬取的数据如下图 源代码: #-*-coding:utf-8-*- import time from ...
随机推荐
- GIS软件列表
3map:行星地球项目由3map驱动,这是一个自由软件,由Telstra宽带基金会创建并支持,提供客户端与服务器的能力以在线再现虚拟地球. Amein!:其界面介于ArcMap和UMN Mapserv ...
- Qt之QSS(QDarkStyleSheet)
简述 关于样式,前面介绍了很多内容,下面分享一个深色样式表,很值得借鉴! 简述 效果 QSS 更多参考 效果 QSS /* * The MIT License (MIT) * * Copyright ...
- (28)odoo中css可用颜色对照表
颜色 颜色英文代码 形像颜色 HEX格式 RGB格式 LightPink 浅粉红 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 ...
- mysql jdbc连接
public class JDBCTest { public static void main(String[] args) { String sql = "SELECT * FROM us ...
- jQuery选择器介绍:基本选择器、层次选择器、过滤选择器、表单选择器
选择器是jQuery的根基,在jQuery中,对事件处理.遍历DOM和Ajax操作都依赖于选择器.因此,如果能熟练的使用选择器,不仅能简化代码,而且可以达到事半功倍的效果.jQuery选择器完全继承了 ...
- AngularJS directive入门例子
这是<AngularJS>这本书里面提供的一个例子: JS代码: var expanderModule=angular.module('expanderModule', []) expan ...
- gawk
gawk '$2>365&&$3>1' part-00000 | wc -l
- .net matlab 数据类型转换
http://wenku.baidu.com/link?url=HWqh7fna8d4UKz7FniwMzaqC5aW2M4wi5H-lWaRXDlxJlJsPilK_tjMDgRBnNiw7rjTm ...
- [转]Java并发的四种风味:Thread、Executor、ForkJoin和Actor
这篇文章讨论了Java应用中并行处理的多种方法.从自己管理Java线程,到各种更好几的解决方法,Executor服务.ForkJoin 框架以及计算中的Actor模型. Java并发编程的4种风格:T ...
- if语句使用
package yuan; public class Yuan { public static void main(String[] args) { int a = 1; int b = 8; int ...