专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
51好读  ›  专栏  ›  爬虫俱乐部

爬虫神器curl继续带你抓网页

爬虫俱乐部  · 公众号  ·  · 2017-10-13 17:13

正文

有问题,不要怕!点击推文底部“ 阅读原文 ”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱 [email protected] ,我们会及时为您解答哟~

在之前的推文《 一起来揪出网页真实链接! 》中,我们介绍了在遇到网页是分页显示并且点击其他页面网址没有发生任何变化时,如何利用谷歌浏览器找到 网页的真实链接 。但是有时我们还会遇到另外一种情况:通过前述的方法找到网页的链接后,发现网址中仍然没有可以作为识别不同网页的 标识参数 (例如 page=1 )。别慌,今天小编就手把手带你解决这个问题。

1

我们现在以新浪财经中代码为 00001 港股长和 的历史交易数据为例( http://stock.finance.sina.com.cn/hkstock/history/1.html ),首先来观察一下该网页:它虽然不是分页显示的,但在其右上方有一个 年度 季度 的选择项,可以据此查看长和在过去不同年份和季度的股票交易信息,如下图:

同时我们注意到该网页的网址,没有可以作为标识的参数,因此在这里就需要我们再一次踏上寻找网页真实链接的旅途啦~

我们先用之前推文中介绍的方法尝试寻找其真实链接:在网页空白处单击右键选择“ 检查 ”,点击“ Network ”,再按 F5 刷新,在弹出的众多链接中点击第一个链接,查看它的 Response ,发现其内容与网页的内容一致,那现在是不是就可以确定它是我们要找的网页真实链接呢?

别着急,我们继续右击第一个名为1.html的链接,点击 copy copy link address (这个操作可以将网页真实链接复制下来),结果发现为 http://stock.finance.sina.com.cn/hkstock/history/1.html ,很明显这并不是我们需要的具有标识参数的网页链接,场面一度十分尴尬。

2

为什么会出现这样的情况?这主要是因为新浪财经的http请求方式为 post ,上篇推文中我们曾经提到过,最常见的两种http请求方式为get和post,它们之间的区别在于 get 请求的数据会 附在URL之后 ,并且 以?分割 URL和传输数据,参数之间 以&相连 ,并且浏览器中会产生 目标URL ,而post不会。那么现在我们就来介绍如何实现http请求方式为post的网页的抓取。

我们先选择查看港股长和过去某一季度的交易数据(例如 2016年第四季度 ),最初还是按照上述方法查找网页真实链接,可以发现第一个链接其返回信息与网页的内容相符,进一步查看其 Headers ,注意到网页的请求方式 (Request Method) POST ,如图:

这时如果继续像之前那样操作,是无法得到网页的源代码的,所以需要利用 curl 来模拟浏览器请求,在这之前,我们先了解一下该网页的请求头,也就是 Request Headers ,谷歌开发者工具已经为我们准备好了这些信息,如下图:

我们来简单地介绍下请求头中部分header的含义:

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

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

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

Referer :当浏览器向web服务器发送请求的时候,一般会带上Referer,代表 网页的来源 ,即告诉服务器它是从哪个页面链接过来的。

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

在请求头信息的下方还有两个参数 year season ,这正是我们一开始查询的2016年第四季度对应的参数,也就是我们需要的标识参数,如下图:

3

为了使用curl模拟浏览器请求,我们利用 -H 将各个 header 之间衔接起来,以 --data 或者 -d 指定使用 POST 方式传递数据,如下图:

现在就可以在stata中利用curl将这个网页抓取下来,我们可以如上图所示将所有的header都保留,但如果网页没有做反爬或者只是做了一些基础的反爬,只保留标识参数也就是 year=2016 season=4 并以 & 连接即可。在stata中输入如下命令:

clear

!curl --data "year=2016&season=4" -o sina.txt http://stock.finance.sina.com.cn/hkstock/history/00001.html

shellout sina.txt

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

这样一来,港股长和在2016年第4季度的历史交易信息就被抓取下来了,以后大家就可以利用这个方法来抓取http请求方式为 post 的网页啦,别忘了再复习一下抓取请求方式为 get 的网页的方法哦~

没看懂记得戳下方 视频 学习哦!


注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。 另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑:闫续文

技术总编:刘贝贝



往期推文推荐:

1. 高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3. 命令 sum2docx 输出统计量表到 docx 文件

4. reg2docx 报告你的实证结果吧!

5. 爬虫俱乐部又出新命令了 ——wordconvert 转换你的 word 文件

6. putdocx+wordconvert— 将实证结果输出到 Word .docx )文档

7. Stata 15 Markdown—— 没有做不到,只有想不到!

8.







请到「今天看啥」查看全文