2种方法简单爬取JS加载的动态数据

2023-11-01

参考原文:http://www.cnblogs.com/buzhizhitong/p/5697683.html


需要爬取的网站数据: http://gkcx.eol.cn/soudaxue/queryProvince.html?page=1 一共是165页,将page=1 变成其他的数字即可访问。


获取所有的url:  urls = ('http://gkcx.eol.cn/soudaxue/queryProvince.html?page={}'.format(i) for i in range(1,166))


用火狐浏览器打开需要爬取的网页,右键,查看页面源代码,CTRL + F 查找输入293,源代码里面并没有这个值,说明是动态加载的数据。


对于动态加载的数据目前我熟知的有两中办法,一是使用selenium,二是分析网页元素,找出该数据的原始网页,提交表单,获取不同的数据,用来达到爬取的目的。


方法一:

#coding=utf-8
from bs4 import BeautifulSoup 
from selenium import webdriver

urls = ('http://gkcx.eol.cn/soudaxue/queryProvince.html?page={}'.format(i) for i in range(1,166))

driver=webdriver.Firefox()

driver.maximize_window()

for url in urls:
    #print ("正在访问{}".format(url))
    driver.get(url)
    data = driver.page_source
    soup = BeautifulSoup(data, 'lxml')
    grades = soup.find_all('tr')
    for grade in grades:
        if '<td>' in str(grade):
            print(grade.get_text())

代码说明:

 from bs4 import BeautifulSoup   使用BeautifulSoup  解析网页数据

from selenium import webdriver 使用selenium爬取动态数据

urls = ('http://gkcx.eol.cn/soudaxue/queryProvince.html?page={}'.format(i) for i in range(1,166))   一个包含所有需要爬取的网站生成器

driver=webdriver.Firefox()  打开Firefox浏览器

driver.maximize_window()  窗口最大化

driver.get(url)  浏览器自动跳转到该url链接

data = driver.page_source   获取页面元素,里面就包含了需要爬取的数据

soup = BeautifulSoup(data, 'lxml')
    grades = soup.find_all('tr')
    for grade in grades:
        if '<td>' in str(grade):
            print(grade.get_text())

通过对数据的分析,写出上面的查找方法,即可获取所有数据。


通过这种方法获取数据,简单,也比较直观,缺点是太慢了。


现在通过方法二是获取数据。


用火狐浏览器打开需要爬取的网页,右键  查看元素,选择网络,默认就好。


(有些老版本的火狐浏览器可能需要安装firebug插件)


点击第二页,看看都加载了哪些网页和数据。


分析如下图:



分析得知类型为json的那一栏即是我们需要的数据


查看消息头里面的请求网站

https://data-gkcx.eol.cn/soudaxue/queryProvince.html?messtype=jsonp&callback=jQuery183005011523805365803_1512185796058&luqutype3=&province3=&year3=&luqupici3=&page=2&size=10&_=1512185798203


真正的请求网站 https://data-gkcx.eol.cn/soudaxue/queryProvince.html

参数 messtype=jsonp&callback=jQuery183005011523805365803_1512185796058&luqutype3=&province3=&year3=&luqupici3=&page=2&size=10&_=1512185798203


也可以点击右侧的参数栏参看参数




 

page 表示当前页数

size表示每页显示的条目数


写出代码

#coding=utf-8
import requests
import json
from prettytable import PrettyTable  


if __name__=='__main__':
    
    url = 'https://data-gkcx.eol.cn/soudaxue/queryProvince.html'

    row = PrettyTable()
    row.field_names = ["地区", "年份", "考生类别", "批次","分数线"]
    
    for i in range(1,34):
        data ={"messtype":"json",
              "page":i,
              "size":50,
              "callback":
              "jQuery1830426658582613074_1469201131959",
              "_":"1469201133189",
              }
        school_datas  = requests.post(url,data = data).json()
        datas = school_datas["school"]
        for data in datas:
            row.add_row((data["province"] ,data["year"],data["bath"],data["type"], data["score"]))


    print(row)


代码说明

for i in range(1,34): 

一共是 1644条,每页显示的最大条数是50条,1600/50 = 32,还有44条就是33页,所以范围就应该是(1,34)


        data ={"messtype":"json",
              "page":i,
              "size":50,
              "callback":
              "jQuery1830426658582613074_1469201131959",
              "_":"1469201133189",
              }

分析得出的提交数据,使用post方式。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2种方法简单爬取JS加载的动态数据 的相关文章

  • Python实现超简单【抖音】无水印视频批量下载

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 作者 python乱炖 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资
  • 爬取中国移动用户问答

    最近一个好朋友在搞爬虫 问了很多问题 所以干脆直接写了一个范例 这个程序整体要两次解析网页 第一层是分析网页中的json数据来获取qtid 第二层是用qtid来解析获得问答所在的网页 因为在问答网页里的数据存储是引用的数据库中的数据 所以不
  • 零基础学完Python的7大就业方向,原来赚钱的路子这么多?

    我想学 Python 但是学完 Python 后都能干啥 现在学 Python 哪个方向最简单 哪个方向最吃香 相信不少 Python 的初学者 都会遇到上面的这些问题 大家都知道 Python 很吃香 薪资高 就业面广 但具体的 有哪些方
  • 直接使用POST方法登录网站

    浏览器在 POST 数据之后能够自动登录 那么我能不能在代码中直接模拟这个过程呢 于是我设定了这样的一个流程 1 设置浏览器的 headers 设置请求等 2 使用 httpfox 工具获取post data 3 将post data 写下
  • [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时 总是遇到JS临时加载 动态获取网页信息的困难 例如爬取CSDN下载资源评论 搜狐图片中的 原图 等 此时尝试学习Phantomjs和CasperJS来解决这个问题 这第一篇文章当然就是安装过程及入门介绍
  • python模拟登录京东网页

    目标网站 京东网首页登录 目标网址 https www jd com 任务要求 1 导入selenium库 并使用该库驱动Chrom浏览器 完成请求 2 驱动浏览器对象 找到登录按钮 点击 3 在新页面中选择账号登录 4 找到用户名和密码输
  • Python笔记(基本入门函数)

    第一章 快速上手 基础知识 1 3 x y x x y y 注意求余运算符 向下圆整 如果是负数 则更远离0 10 3 10 3 10 3 10 3 十六进制 0x 八进制 0o 十进制 0b 0xAF 175 0o10 8 0b10110
  • 04_两种常见的网页反爬措施及应对方法

    一 封禁IP地址反爬 1 应对思路 理解这种反爬方法的含义 当我们用自己电脑的ip地址短时间 高频率访问某个具有此类反爬设置的网站 这种网站就会把我们的ip地址封禁 一般都是封24小时或者其他时间 解决方案 通过代理ip访问 这种方式只不过
  • Python爬虫实战之电影爬取过程

    俗话说 兴趣所在 方能大展拳脚 so结合兴趣的学习才能事半功倍 更加努力专心 apparently本次任务是在视频网站爬取一些好看的小电影 地址不放 狗头保命 只记录过程 实现功能 从网站上爬取采用m3u8分段方式的视频文件 对加密的 ts
  • python爬虫:抓取页面上的超链接

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 它能够通过你喜欢的转换器实现惯用的文档导航 查找 修改文档的方式 Beautiful Soup会帮你节省数小时甚至数天的工作时间 页面上的超链接 在H
  • Python实现输入电影名字自动生成豆瓣评论词云图(带GUI界面)小程序

    Python实现输入电影名字自动生成豆瓣评论词云图 带GUI界面 小程序 一 项目背景 电影逐渐成为人们生活的不可或缺的一部分 而了解一部电影的可以通过电影评分与大众推荐度 但以上的方式都太过于片面 了解一部电影的方法是通过已经观看完电影的
  • Python爬虫10-Selenium模拟登录

    目录 10 1Selenium和PhantomJS和headless chrome 10 1 1Selenium的概念和安装 10 1 2浏览器的选择和安装 10 2Selenium和PhantomJS与Chrome的配合使用 10 2 1
  • 抓取得物数据出现验证码的解析思路

    原创来自本人的公众号 阿嚏个技术 公众号文章地址 得物采集数据出现geetest验证码的解析方式 本文仅提供反爬技术的分析思路 勿做商业用途 如有侵权 请联系删除 之前写过一篇爬得物数据的文章 毒 得物 APP历史购买数据抓取 阅读数还是挺
  • [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒 同样可以通过Spider获取网站内容 最近学习了Selenium Phantomjs后 准备利用它们获取百度百科的旅游景点消息盒 InfoBox 这也是毕业设计实体对齐和属
  • Python 快速验证代理IP是否有效

    有时候 我们需要用到代理IP 比如在爬虫的时候 但是得到了IP之后 可能不知道怎么验证这些IP是不是有效的 这时候我们可以使用Python携带该IP来模拟访问某一个网站 如果多次未成功访问 则说明这个代理是无效的 代码如下 import r
  • python爬虫——爬取快读小说app

    1 爬取结果 csv文件 出现了有两个表头 不明所以 无关大雅 2 使用fiddler4进行抓包 通过观察url 我们不难发现其中的规律 要实现进行分类抓取 需要更改url第一个数字 如下 https sc canrike com Cate
  • 高考失利,还适合选计算机专业吗??

    前言 高考落榜 人生陷入低谷 对于很多人来说 这意味着梦想的破灭和无尽的绝望 但是 对于我来说 这只是人生旅程的一个起点 我喜欢编程也热爱编程 虽然网上很多言论说计算机行业已经很卷了 但是我却认为无论再哪个行业 你不卷 也同样落后于人 所以
  • python3GUI--抖音无水印视频下载工具(附源码)

    文章目录 一 准备工作 二 预览 0 复制抖音分享短链接 1 启动 2 运行 3 结果 三 设计流程 1 总体设计 2 详细设计 四 源代码 五 说明 总结 hello 大家好啊 失踪人口回归了 捂脸 本次使用tkinter撰写一篇 抖音无
  • Python爬虫-MongoDB

    Python爬虫 MongoDB 文章目录 Python爬虫 MongoDB 前言 与MySQL对比 启动 关闭MongoDB 操作 数据库操作 集合操作 数据操作 增 删 改 查 保存 运算符 高级操作 聚合 常用管道 常用表达式 安全性
  • 为什么要学习Python?

    前言 Python 是当今非常流行的编程语言 在互联网上经常可以看到他的身影 它应用非常广泛 例如编程 Web 开发 机器学习和 数据科学Q 等 TIOBE 官网近日公布了 2023 年 8 月的编程语言排行榜 Python 依然排行第一

随机推荐

  • 内存数据库简介-内存数据库性能排行

    内存数据库性能排行 内存数据库很多人还不知道 现在让我们一起来看看吧 在网络技术和计算机技术广泛普及的今天 数据库已经成为IT领域最重要的课题之一 所谓数据库 是指一种用于存储数据的库存 可以为IT开发者访问数据提供极大的便利 目前很多管理
  • eplan怎么生成端子图表_自定义EPLAN表格模板

    缘起 使用eplan制图 一个方便之处就是它能自动生成表格 如端子图表 插头图表等 但是有时候软件自带的图表模板又不符合我们的要求 想要自己定义表格 比如系统自带的端子图表是图1样式的 我想要的是图2样式的 如何做到呢 本文就以自定义端子图
  • 根据后序或者前序 + 中序建树的多种方法!

    根据 后序or前序 中序 建树的多种方法 以下例子都是实战题 值得收藏 值的学习 1 堆的方式 完全二叉树 利用了完全二叉树的特性 根结点i的孩子结点左孩子为2i 右孩子为2i 1 注意此时i是从1开始编号 但是每棵子树的根结点没有直接给出
  • python输入一个字符、如果是大写字母、转换为小写_python语言 输入一个字母 如果它是一个小写英文字母 则把它转换为对应的大写字母输出?...

    展开全部 char1 input 请输bai入一个小写英文du字母zhi if ord char1 gt ord a and ord char1 lt ord z print char1 upper else print 不是小写字母 da
  • JNI基本使用

    编译运行 首先介绍一些编写JNI的大致流程 可以直接调过这部分 生成头文件 这步可以不做 但是JNI对C C 函数的命名有严格要求 同时函数的命名会很长 所以还是直接生成头文件 然后从头文件里边复制函数声明 使用下面的命令生成头文件 记得代
  • SourceTree提交合并流程

    先写提交流程 缓存 提交 获取 拉取 解决冲突 提交 推送 下面和多分支开发合并 先保证 拉取到最新的 把项目切到主分支 鼠标点到被合并分支 右击选中 合并 到当前分支
  • ARM9/13——用C语言实现LED1/LED2/LED3灯点亮

    目录 代码 gpio h gpio c main c 运行效果 代码 gpio h ifndef GPIO H define GPIO H 1 RCC寄存器封装 用宏定义进行封装 define RCC AHB4 ENSETR volatil
  • 【Unity3D自学记录】Unity3D之KeyCode键值

    Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 Keypad0 小键盘0 Keypad1 小键盘1 K
  • 为什么要在C ++ 11中使用“override”说明符?

    如果您知道Java 那么您可能已经很熟悉Java了 这对您来说可能是完全简单的 Override annotation 如果您一直使用C C 进行编码 那么这可能是新的 您可能会问自己一个问题 为什么在不必要的时候为什么要放一个额外的说明符
  • 数独基本规则_数独入门:你必须掌握的那些规则和技巧

    很多人想涉足数独领域 但苦于不知该如何入门和上手 甭愁了 北京市数独运动协会贴心地为菜鸟们总结了这一篇数独的元素 规则和技巧 满满的都是干货 如果你看完还觉得不够过瘾 那就移步至数独女王的达人攻略 接受高阶的训练和挑战吧 数独的规则 在空格
  • 获取OpenHarmony源码:从DevEco Marketplace获取(2)

    引言 OpenHarmony源码的获取方式有三种 从gitee GitHub等基于git的代码托管平台获取 从华为的DevEco Marketplace网站获取 从镜像站点获取 本文介绍如何在Ubuntu版本的DevEco Device T
  • 大数据知识目录

    第一阶段 安装虚拟机 第二阶段 Linux操作系统 第三阶段 zookeeper分布式协调服务框架 第四阶段 Hadoop分布式文件系统HDFS 第五阶段 Hadoop分布式计算Mapreduce和资源管理 第六阶段 数据仓库Hive 第七
  • 对于uts namespace共享的测试

    前言 单单以下列命令运行虽然是root 还不行 我们需要加 privileged 不然会报 hostname you must be root to change the host name docker run it uts host u
  • python写程序计算无穷级数_圆周率 π 展开 为 无穷级数

    圆周率 展开 为 无穷级数 其实 很简单 如图 可以用 黄色小三角形 和 橙色小三角形 以及 依此类推 下去 的 无数个 小三角形 来 逼近 圆面积 把 这个 无限逼近 的 圆面积 称为 S 因为 圆面积 r 所以 有 S r S r 即
  • 【VC++类型转换】CString和System::String类型的转换

    1 CString 转换为System String类型 这里的CString是指MFC的CString System String为CLR中的字符串类 我认为最简单的做法是 CString text System String str1
  • 【HBZ分享】Mysql的InnoDB原理

    没有配置主键时Mysql的InnoDB是如何做的 Mysql会使用自带的rowid作为主键 InnoDB的底层数据结构是什么 B Tree BTree的特点 MyISAM 非聚集索引 即 索引 和 对应数据 是分开的两个文件 找到对应数据后
  • 两年来主要工作框架图

    两年来主要工作框架图 包含了从MES到SAP的全程流程 从收集一线数据开始到汇总历史数据 归档 直到最后的BI DW分析展现 主要工作流程图
  • Java中正则表达式的使用

    在Java中 我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串 或者对字符串进行分割 或者对字符串一些字符进行替换 删除 一般会通过if else for 的配合使用来实现这些功能 如下所示 Java代码 public cla
  • 以互联网思维做好客户端软件

    加入爱奇艺的时间不长 但我感受到的震撼却不小 在外企打拼了十几个春秋 今年终于有机会进入一家国内顶尖的互联网企业 真真切切地有一番不太一样的体验 不过 我今天并不想说在外企工作与国内企业的差别 目前 我负责 爱奇艺PPS影音 PC客户端软件
  • 2种方法简单爬取JS加载的动态数据

    参考原文 http www cnblogs com buzhizhitong p 5697683 html 需要爬取的网站数据 http gkcx eol cn soudaxue queryProvince html page 1 一共是1