查看原文
其他

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

王悦 Stata and Python数据分析 2022-03-15

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

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

1

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

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

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

别着急,我们继续右击第一个名为1.html的链接,点击copycopy 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:用来记录一些网站登录信息访问信息等。

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

3

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

现在就可以在stata中利用curl将这个网页抓取下来,我们可以如上图所示将所有的header都保留,但如果网页没有做反爬或者只是做了一些基础的反爬,只保留标识参数也就是year=2016season=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的网页的方法哦~

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

https://v.qq.com/txp/iframe/player.html?vid=g0560nvoz1g&width=500&height=375&auto=0
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同纯属巧合!

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

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

                        文字编辑:闫续文

技术总编:刘贝贝



往期推文推荐:

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

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

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

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

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

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

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

8.矩阵和宏的故事

9.shellout,open anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存