• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Dragon水魅
博客园    首页    新随笔    联系   管理    订阅  订阅

POST请求及异步加载的网页爬取——简书搜索页面

文章目录

      • 问题描述
      • 分析网页
        • 1.判断网页加载方式
        • 2.判断网页是否为异步加载
        • 3.判断网页请求方式
        • 获取请求url和请求参数
      • 解决方案

问题描述

我想输入一个关键词,获取简书搜索界面的每一页中每一篇文章的url链接。
在这里插入图片描述

分析网页

1.判断网页加载方式

1)右键查看源代码,发现想要的数据不在源代码里,初步判断网页没那么简单。
2)Google Chorme,f12进入控制台后f5刷新,找到Doc选项,预览第一个包的加载页面,发现只是加载了一些标题等无关紧要的信息,可以判断页面中有价值的东西不是静态加载出来的。
注:Doc是网站第一批请求的包,一般来讲doc中的信息都是静态的,可以直接通过requests库轻易的获取到。
在这里插入图片描述

2.判断网页是否为异步加载

3)我们进入XHR栏中,发现加载了一个包,经过观察分析,发现文章的重要信息放在了“entries”中,包含了文章id,标题等信息:
注:XHR是一种浏览器API,可以极大简化异步通信的过程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再仔细观察一下,可以发现每篇文章的具体信息中包含一个“slug”标签,这正是每一篇文章的url的后半部分:
在这里插入图片描述
在这里插入图片描述
这个方向对了,网页中有价值的信息是以异步加载的方式完成的。
这一值得说明一点的是:Ajax加载也是异步加载的一种形式,而判断是否为Ajax加载的方式是,判断XHR栏中包的Request Headers中是否有以下标签:
在这里插入图片描述
当然,简书不是Ajax加载的,经过测试我发现CSDN的评论区是Ajax加载的,不过这是另一个问题。如果HDR中有包是Ajax加载的,而你恰好又想要这部分的数据,那么你需要在请求头中加入一对标签:

x-requested-with: XMLHttpRequest

3.判断网页请求方式

还是这个XHR包,我们观察它的Headers信息,很明显地看到它是一个POST请求:
在这里插入图片描述
POST请求的意思是,每一次访问网页,需要在请求的url地址后面加上要请求的参数。那么接下来我们就需要找到请求url和请求参数。

获取请求url和请求参数

显而易见,请求url就在Headers的“Requests URL”中:
在这里插入图片描述
请求参数在Headers的最下面,存放在“Query String Parameters”:
在这里插入图片描述
我们换到第二页第三页再看一下请求参数:
在这里插入图片描述
在这里插入图片描述
问题逐渐明朗了,请求参数共有4个,而其中只有“page”是跟随页面变化的,这样,我们就能构造一个

解决方案

posted @ 2019-12-26 17:14  Dragon水魅  阅读(561)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3