scrapy分页抓取网页( 我们先用之前推文中介绍的方法尝试寻找其真实链接 )

优采云 发布时间: 2021-11-17 20:18

  scrapy分页抓取网页(

我们先用之前推文中介绍的方法尝试寻找其真实链接

)

  

  

  在之前的推文《一起来挖掘网页的真实链接吧!》中,我们介绍了如何使用谷歌浏览器在网页分页显示且点击时没有变化的情况下找到网页的真实链接但是有时我们也会遇到另一种情况:通过上述方法找到网页的链接后,我们发现网址中仍然没有可以用来识别不同网页的标识参数(例如page= 1). 别慌,今天小编带你一起来解决这个问题。

  1

  我们以新浪财经中00001的港股历史交易数据为例()。首先我们来看一下网页:虽然不是分页显示,但右上角有年度和季度选项。基于此,您可以查看昌河过去不同年份、不同季度的股票交易信息,如下图:

  

  同时我们注意到网页的URL没有可以作为识别的参数,所以这里需要再次踏上寻找网页真实链接的旅程~

  我们先尝试使用上一条推文介绍的方法找到真正的链接:在网页空白处右击选择“检查”,点击“网络”,然后按F5刷新,点击中间的第一个链接很多弹出查看它的响应的链接发现它的内容和网页的内容是一致的。是否可以确定它是我们现在正在寻找的网页的真实链接?

  

  

  别着急,我们继续右键第一个名为1.html的链接,点击复制→复制链接地址(这个操作可以复制网页的真实链接),结果这显然不是我们需要什么 带有识别参数的网页链接非常尴尬。

  2

  为什么会出现这样的情况?这主要是因为新浪财经的http请求方式是post。正如我们在上一条推文中提到的,两种最常见的 http 请求方法是 get 和 post。它们的区别在于get请求的数据会附加到URL上。之后URL和传输数据用?分割,参数用&连接,浏览器会生成目标URL,但是post不会。那么现在我们来介绍一下如何实现对http请求方式为post的网页的抓取。

  我们首先选择查看港股领头羊和过去一个季度(如2016年第四季度)的交易数据。最初,我们按照上述方法查找网页的真实链接。我们可以发现第一个链接的返回信息和网页的内容是匹配的。它的Headers注意到网页的请求方法(Request Method)是POST,如图:

  

  这时候如果继续像之前一样操作,是无法获取到网页的源代码的,需要使用curl来模拟浏览器请求。在这之前,我们先来了解一下网页的请求头,也就是Request Headers,谷歌开发者工具为我们准备了这个信息,如下图:

  

  先简单介绍一下请求头中一些headers的含义:

  Accept-Encoding:由浏览器发送给服务器,声明浏览器支持的编码类型

  Accept-Language:用于告诉服务器浏览器可以支持什么语言

  User Agent:中文名称为User Agent,简称UA。它是一个特殊的字符串头,使服务器能够识别操作系统和版本、CPU 类型、客户端使用的浏览器和版本、浏览器渲染引擎、浏览器语言和浏览器插件

  Referer:当浏览器向Web服务器发送请求时,通常会带一个Referer,它代表网页的来源,也就是告诉服务器它是从哪个页面链接的。

  Cookies:用于记录一些网站的登录信息和访问信息等。

  在请求头信息下面,有年份和季节两个参数。这些就是我们初步查询到的2016年第四季度对应的参数,也就是我们需要的识别参数,如下图所示:

  

  3

  为了使用curl模拟浏览器请求,我们使用-H连接headers,使用--data或者-d指定使用POST传输数据,如下图:

  

  现在你可以在 stata 中使用 curl 来抓取这个网页。我们可以保留如上图所示的所有header,但是如果网页不反爬或者只是做一些基本的反爬,则只保留识别参数。即 year=2016 和 season=4 并与 & 相连。在stata中输入以下命令:

  清除

  !curl --data "year=2016&season=4" -o sina.txt

  shellout sina.txt

  -o的作用是将获取到的网页信息下载保存到一个名为sina.txt的文件中,保存的路径为stata的默认保存路径。如下所示:

  

  就这样,港交所总裁和2016年第四季度的历史交易信息就被*敏*感*词*了。以后可以使用该方法抓取http请求方式为post的网页。不要忘记再次查看捕获。如何获取请求方式为get的网页~

  

  不明白的记得戳下方视频学习哦!

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线