首页 > 其他分享 >爬虫之抓取js生成的数据

爬虫之抓取js生成的数据

时间:2023-11-06 15:34:03浏览次数:32  
标签:请求 路径 抓取 爬虫 详情页 js 数据 页面

有很多页面,当我们用request发送请求,返回的内容里面并没有页面上显示的数据,主要有两种情况,一是通过ajax异步发送请求,得到响应把数据放入页面中,对于这种情况,我们可以查看关于ajax的请求,然后分析ajax请求路径和响应,拿到想要的数据;另外一种就是js动态加载得到的数据,然后放入页面中。这两种情况下,对于用户利用浏览器访问时,都不会发现有什么异常,会迅速的得到完整页面。

  其实我们之前学过一个selenium模块,通过操纵浏览器,然后拿到浏览器显示出来的数据,这种方式是可以拿到数据的,但本节是要分析如何找到那个js在控制数据的生成,及js发送请求的路径,从而我们可以向这个路径发送请求,直接就得到数据。

  在之前的爬虫过程中,我最烦的就是关于js动态生成的数据,我根本无法找到是哪一个js实现的(因为js太多了),今天看了大佬的博客,瞬间感觉简单了很多,谢谢大佬,祭出大佬的博客:https://www.cnblogs.com/bobo-zhang/p/10561617.html

  一、需求描述及页面分析

  1,需求描述

  基础页面路径:https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html

  点击进入每个标题里面:

  需求就是爬取每个标题下的新闻内容

  2,页面分析

  2.1 主页面

  查看ajax请求:

  接下来我们就解析如何找出发送请求的js

  二、查找发送请求的js

  在响应的数据里,包含新闻标题,以及本条新闻的详情页路径,于是现在我们去访问详情页,以及分析详情页

  访问详情页,查看详情页的响应,数据里面也没包含具体数据,那它就和主页面一样,接下来去看ajax:

  ajax并没有新闻相关数据,所以不是利用ajax请求拿到数据的,那只有剩下js了,我们就去寻找是哪个js发送的请求来获取数据,步骤上面一致:

详情页数据的js请求路径:

详情页请求路径:

  我们可以看到,详情页数据的请求路径在最后一个斜杠前面的路径和详情页的请求路径在最后一个斜杠前面都是一样的。于是我们可以这样:

第一步:拿到详情页的请求路径:
url1='https://www.xuexi.cn/1ed1e76f885a3c19576e495ad2b279e5/e43e220633a65f9b6d8b53712cba9caa.html'
第二步:把url1最后一个斜杠后面的内容替换掉
url2='https://www.xuexi.cn/%s/datae43e220633a65f9b6d8b53712cba9caa.js'%(url1.split('/')[3])  #把url1用‘/’分割,拿到第四部分,即索引为3,然后拼接进去既可
这样就构造好了一个详情页数据请求路径,然后直接去访问这个路径既可拿到数据,就不用去访问详情页了

转载自:https://www.cnblogs.com/12345huangchun/p/10580520.html

 

标签:请求,路径,抓取,爬虫,详情页,js,数据,页面
From: https://www.cnblogs.com/yuyanc/p/17812811.html

相关文章

  • nvm实现对nodejs的版本管理
    下载Releases·nvm-sh/nvm·GitHub介绍在我们的日常开发中经常会遇到这种情况:手上有好几个项目,每个项目的需求不同,进而不同项目必须依赖不同版的NodeJS运行环境。如果没有一个合适的工具,这个问题将非常棘手nvm应运而生,nvm是Mac下的node管理工具,有点类似管理Ruby的rvm,如果......
  • jsqlparser v4.6 版本下sql解析报错
    项目版本:springboot2.7.2mybatis-plus3.5.2jsqlparser4.6该版本下mybatis-plus生成的sql文件带有连续\n\n\nCCJSqlParserUtil.parseStatements("select\n\n\n*from\n\ndual\n")再使用jsqlparser进行sql解析时会出现如下报错net.sf.jsqlparser.parser.ParseExc......
  • Vue.js 获取当前日期前几个月的日期
    1、获取当前日期并想获取6个月前的日期getDate(){varnow=newDate();varyear=now.getFullYear();//得到年份varmonth=now.getMonth()+1;//得到月份vardate=now.getDate();//得到日期varhour="00:00:00";/......
  • node.js快死了!Bun 1.0 正在改变 JavaScript 游戏规则
    在进一步讨论之前,我们需要解释什么是javascript运行时以及为什么我们应该关心它的速度。 想象一下,你用JavaScript写了一个故事,你需要有人大声朗读。JavaScript运行时就像那个友好的叙述者,让你的故事栩栩如生!这是一个特殊的环境,你的JavaScript故事被阅读和表演出来。但是,让我......
  • 使用Wireshark抓取报文
    Wireshark抓取报文(1)如何抓取到你所选择的协议报文我抓取https报文,访问百度服务器得到了pingwww.baidu.com后的IP地址14.119.104.189,然后打开wireshark,在wireshark中选择WLAN接口连接。(2)Wireshark出来很多报文,如何过滤出与你所选协议相关的报文设置抓包过滤器ipdstorsrc......
  • hrml-js笔记
    Chrome警告:PagelayoutmaybeunexpectedduetoQuirksMode文档加上<!DOCTYPEhtml>修改后一个悬浮的Div位置错误TipDiv.style.left=event.clientX;...修改后为 TipDiv.style.left=''+event.clientX+'px'; TipDiv.style.top=''......
  • Nodejs的安装以及配置(node-v12.16.1-x64.msi)
    Nodejs的安装以及配置1、安装node-v12.16.1-x64.msi点击安装,注意以下步骤本文设置nodejs的安装的路径:D:\soft\nodejs  继续点击next,选中AddtoPATH,旁边的英文告诉我们会把环境变量给我们配置好 当然也可以只选择Node.jsruntime,根据自己需要选择安装 下面如......
  • 博客园博客高级JS美化
    前言之前有过博客园[JS美化]简单教程有很多园友就私信问我,说这篇都是比较基本的美化,虽然也很好看,但是想要我这种效果的。今天就把我博客的实现JS代码赠给大家!准备和博客园[JS美化]简单教程一样的,进入博客后台,申请JS权限,然后选择皮肤SimpleMemory申请大概半个小时到一天左右......
  • Python-geojson转shp 工具
    工具使用演示: ......
  • 【NestJS系列】核心概念:Module模块
    前言模块指的是使用@Module装饰器修饰的类,每个应用程序至少有一个模块,即根模块。根模块是Nest用于构建应用程序的起点,理论上Nest程序可能只有根模块,但在大多数情况下是存在多个模块的,每个模块各自封装一组相关的功能。@Module装饰器@Module()装饰器可以传入一个对象,属性值如下:provi......