好久没有写关于爬虫的东西了,如果正在读这篇博客的你看过我的另一篇《Python新手写出漂亮的爬虫代码1——从html获取信息》想必已经对一些写在html中的信息进行过爬取了,今天给大家介绍一下另一种爬虫——动态爬虫。
何为动态爬虫,html中的信息是静态的,或者说是通过html语言生成了网页中的对应信息,是写好的,你把网页的html源代码粘贴过来,你要的信息就在里面,这种情况下就是静态爬虫,而有的时候我们会发现我们需要的信息不在html源码中,比如电商网站的评论,某些网站的一些条形图啊,折线图啊,(这些图实际上是数字,只是通过某种接口传到网页上,然后渲染成了图的形式,其本质上是数字),这些可能频繁更新的信息(比如评论每小时甚至每分钟都在更新),这时候,如果将它写在html中,是一个很难受的过程,因为有一个新评论你就要改写html,所以对于这种情况,我们想要的数据都会存在一个json文件中。
这里需要做一个说明,我们看网页源代码,通过在网页上鼠标邮件,点选“查看网页源代码”出来的才是html源码,而通过F12调出的开发者工具中的element或元素中的那些,不是html代码,而是html代码的一个超集,它比真实的html代码内容要多,所以查看信息是否在html中还是需要点选“查看网页源代码”才准确。
json是一种数据格式,类似于python中的字典,以key:value的形式存储信息,是一种目前越来越常用的方便的数据存储方式。
动态爬虫较静态爬虫而言难点在于定位数据或信息的存储位置,而一旦获取了这个位置(json文件对应的url),那么就非常简单了,使用python的json库可以对json数据轻松的解析,说白了只是根据你要的key提取其value而已,所以动态爬虫是比较简单的(当然,这里还有另一个问题,是异步加载问题,这个以后有机会再讲,异步加载是啥?比如说某个网页,没有“下一页”按钮,而是用鼠标滚轮或者屏幕右侧的滑块,向下滑就会刷新,你连往下刷多久会到底都不知道,这就是异步加载,异步加载可以通过抓包工具去解决,也可以使用selenium模拟鼠标点击去解决,以后会讲到)。
定位json的位置通常是通过“换页”来查看Network的变更,在网页上按F12打开开发者工具,界面放到Network中,然后换页,查看“js”或是“XHR”中文件的更新,然后一一查看更新的json文件,来定位我们需要的信息在哪里。
说了这么多你可能还是有点儿糊涂,没关系,来个例子就懂了,就拿天猫的一个女装来说吧 (这个模特身材还不错哈哈)
请看图1,我们点击红色方块中的“累计评价”,就可以看到以往的评价,按照我们前一篇爬虫的讲解来说,这个信息可能在html代码中,好,那么我们看一看,按下F12,如图2所示。
图1
图2中的1和2位置可以看到,评论仿佛是在一个标签中的,但是还记得我前面的说明么,你在这里看到的html代码是真实html代码的一个超集,比实际的html代码要多,那么我们右键鼠标,选择“查看网页源代码”,并把源码复制粘贴到文本编辑器中,查找图2中1对应的评论,结果如图3所示。
图2
图3中竟然没有搜索到这个评论,也就是说图2的开发者工具欺骗了我们,too young too sample,sometime naive,哈哈,没关系,以后每次爬虫之前都这么看一看,就知道你要的信息是不是在html中了。好了,既然不在html中,那么我们需要去寻找我们想要的信息在哪里了。
图3
按照图4,在开发者工具中选择“Network”,来查看网页其他组件信息。
图4
如图5的红色方块,点击“JS”,不出以外应该是空的,当然如果你那里不是空的也无所谓,无伤大雅,我们要的数据就在JS下,只是现在还未显示出来(还有一些情况,尤其是折线图这些图像形式的数据,一般会存储在XHR下,也就是图5中的粉色圈中,也是.json形式的),接下来我们就要去寻找存储评论数据的json文件了。
图5
此时“JS”下的界面如图5所示,有可能是空的,当然也可能会有一些其他的东西,接下来看图6,点击图6中A处页码“2”,将评论页切换到第二页,这时候你会发现B处,也就是JS界面中出现了一个文件(如果你先前图5中有内容,那此时应该是多出一个文件),这个文件叫“list-detail**********”。我们的数据就存放在这里。
有些时候,你换页后可能会出现或新增多个json文件,不过一般都不会很多,最多也就5个,你只需要挨个点进去看看哪个存放了你需要的信息即可。
图6
接下来,我们双击这个文件,或者单击选中这个文件,复制其url然后粘贴到浏览器的地址栏中也可,其内容如图7所示,这里红框标出了其前三条评论。因为我们是在评论的第二页打开的这个json,所以它对应的是第二页的评论内容,而网页中第二页评论的前三条如图8所示。
图7
图8
接下来看一下评论的页码是怎么控制的。如图9所示,其实两个url只差了之歌数字,就是图9红框标出的”currentPage=”后面的数字,如果是第一页,数字就是1,如果是第二页,数字就是2。好了,换页规律找到了,剩下就是解析json了,就是最简单的一步。
图9
关于json的解析我不准备过多解释了,有python基础的朋友一定对json这个库不陌生,我在代码中以注释的方式给出吧。本例代码使用Python3。
到此,爬虫的第二课——从json获取信息就结束了,以后会陆续退出selenium、异步加载、scrapy的使用教学和案例。
鸿蒙开发
一、Python获取股票行情数据API接口使用python是一种有效的方式来获取高频股票行情数据,以便进行股票行情数据分析编程,我们可以实现自动化的数据获取和分析,为量化交易提供有力支持。股票行情数据种类繁多,包括但不限于股票市场数据、财务报表数据、经济指标数据、实时港股行情报价数据、实时美股行情报价数据、A股股票行情报价数据、实时外汇行情报价数据、实时黄金行情报价数据、实时贵金属行情报价数据等。
## Python获取URL接口的JSON数据在现代的网络应用中,我们经常需要从服务器获取数据。而许多接口返回的数据都是以JSON格式进行交互的。因此,掌握如何使用Python获取URL接口的JSON数据,是每个开发者都应该具备的技能之一。本文将以实际的代码示例,介绍如何使用Python获取URL接口的JSON数据,并对其中的关键概念进行科普说明。### 什么是JSON?JSON(
# Android获取接口JSON数据的实现指南作为一名刚入行的Android开发者,获取接口JSON数据可能是你经常需要面对的任务之一。本文将为你提供一个详细的指南,帮助你理解并实现这一功能。## 流程概览首先,让我们通过一个表格来概览整个流程:| 步骤 | 描述 || --- | --- || 1 | 添加网络权限 || 2 | 创建HTTP请求工具类 || 3 | 发
1. JSON与JsonPATHJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。JSON和XML的比较可谓不相上下。Python 中自带了JSON模块,直接import json就可以使用了。2. JSONjson简单说就是ja
python 调用API接口 获取和解析 Json数据,数据,字典,键值,列表,方法python 调用API接口 获取和解析 Json数据易采站长站,站长之家为您整理了python 调用API接口 获取和解析 Json数据的相关内容。任务背景:调用API接口数据,抽取我们所需类型的数据,并写入指定mysql数据库。先从宏观上看这个任务,并对任务进行分解:step1:需要学习python下的通过ur
文章开始之前,我们先来看一个常见的问题:接到一个任务,需要抓取某个网站上的数据内容,网页上需要输入搜索关键词,然后点击搜索按钮,等待页面加载完毕,获取网页上的搜索结果,而每一个搜索结果项,都需要点击展开才能查看到具体内容。对于该问题,我们可以从网上找到一些解决问题的途径,但是大都不是很全面。这里小编对所有可能出现的问题做了一次调研,并汇总成如下的解决方案,希望对大家有所帮助。首先,我们先来汇总一下
任务背景:调用API接口数据,抽取我们所需类型的数据,并写入指定mysql数据库。先从宏观上看这个任务,并对任务进行分解:step1:需要学习python下的通过url读取数据的方式;step2:数据解析,也是核心部分,数据格式从python角度去理解,是字典?列表?还是各种嵌套?step3:连接mysql数据库,将数据写入。从功能上看,该数据获取程序可以分为3个方法,即step1对应方法requ
在我们日常使用 Python时,经常会使用到 json文件。那么在平时写一些小程序时,如何使用 json文件呢?今天我将介绍如何读取和写入 Json文件。 json是一种数据结构,它是将字符串转换成数据的一种技术。使用 json可以非常方便的将一组数据转换成另一组数据。 在 Python中,可以使用 pandas库读取 json文件。一、使用 Python读取 json文件使用 pan
Python的json有两种方法:edcode:decode:当转化为字典类型时,取出数据时需要用到for循环进行遍历下面是三个例子:1、读取txt文件,其实就是string类型数据,获取值txt文件内容如下:2、 字典格式的数据,获取值3、非正规json格式数据,取出值items = { "iot": "Ammeter", "ite": { "Power": { "value": "on", "
环境:python-3.6.5JSONJSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。Python中自带了json模块,直接import json即可使用json简单说就是javascript中的对象和数组,所以这两种结构就是对
本篇文章小编给大家分享一下python调用API接口获取和解析Json数据代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。任务背景:调用API接口数据,抽取我们所需类型的数据,并写入指定mysql数据库。先从宏观上看这个任务,并对任务进行分解:step1:需要学习python下的通过url读取数据的方式;step2:数据解析,也是核心部分,数
01背景事件的起因在于老板最近的两次“故障”,一次去年的,一次最近。共同原因都是脚手架在发布平台发布打包时出错,导致线上应用白屏不可用。最神奇的是,事后多次 Code Review,结果还是没有发现任何能够导致该问题的 bug,最后推测有可能是服务器在发布打包的时候出了问题。当老板第 N + 1 次吐槽因为他写的工程化工具领来的天外飞锅,我突然思考起来,如何才能避免这种天外飞锅。归根结底,导致这类
一、传统密钥管理的痛点:中心化架构的脆弱性在当前企业密钥管理体系中,无论是自建KMS还是云厂商KMS(如AWS KMS、阿里云KMS),普遍采用中心化架构。此种模式存在固有缺陷:问题风险单点故障KMS服务宕机,导致加解密服务中断,业务瘫痪权限集中管理员拥有“上帝权限”,可任意导出密钥,内部威胁难防审 ...
希尔排序通过**分组插入排序**的思想,有效减少了数据移动的次数,是对简单插入排序的重要改进。
开源免费分享Java Web 智慧乡村旅游服务平台系统源码-SpringBoot2+小程序+MyBatis+MySQL8【含文档】可提供说明文档 可以通过*AIGC**技术包括:MySQL、VueJS、ElementUI、(Python或者Java或者.NET)等等*功能如图所示。可以滴我获取详细的视频介绍
摘要: 本文为Java开发者提供了从Java转向Go语言的快速入门指南,重点对比两种语言的异同。Go凭借轻量级并发模型(goroutine)和高效性能,成为云原生开发的首选之一。文章涵盖环境搭建、基础语法(变量、控制流、函数)、复合数据类型(数组、切片、映射)、错误处理、并发编程(goroutine、通道)以及包管理(gomod)。通过实战示例(RESTful API服务),对比了Java Spring Boot与Go Gin的实现差异,帮助开发者快速掌握Go的核心特性。