有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
我们在抓取网页时,经常会遇到这样的问题,比如说要抓取的网页的信息是分页显示的,但是点击下一页时网址不变,这种情况下我们该怎么进行循环抓取呢?其实造成这种现象的原因有很多种,今天我们来介绍其中的一种。
在正式开始前,我们先来介绍一下最常用的两种http请求方式,分别是get和post,它们之间的区别在于:GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),并且以?分割URL和传输数据,参数之间以&相连。GET方法使用的时候,浏览器中会产生目标URL,而POST不会。
我们以和讯网中全部港股的网页为例( http://quote.hexun.com/default.htm#hkstock),该网页中无论点击哪一页,它的网址都是相同的。同时还注意到,在网页中点击右键查看网页源代码时,无法找到目标信息,比如网页中名为GRANDE HOLDINGS的港股的代码为00186,但是在网页源代码中无法查找到关于00186的信息。如图:
再来尝试一下用copy来抓取网页源代码,在Stata中输入如下命令:
clear
cap mkdir E:/爬虫
cd E:/爬虫
copy “http://quote.hexun.com/default.htm#hkstock” temp.txt,replace
结果Stata显示server refused send file,即服务器拒绝发送文件,这是因为和讯网做了反爬设置,它将网页的真实链接隐藏了起来。
我们现在需要做的就是找到网页的真实链接,那么如何实现这个操作呢?我们可以借助浏览器,这里推荐使用谷歌浏览器。
1.在网页上点击鼠标右键,点击检查,得到如下界面
2.点击Network,如图所示
刚打开时,下部分区域即network的工具列表可能显示为空白,按F5键更新,这样工具列表中就会出现许多与网页相关的链接,如下图所示:
面对工具列表中如此多的信息,我们应该如何进行选择呢?
1.注意到工具列表中有一栏Status,其中值为200的是正常显示的网页链接
2.对于gif、jpeg等格式一般没有我们需要的信息,js、document等格式一般含有我们需要的信息。我们可以按照这个“规则”更快的筛选出网页的真实链接。对于这个网页,我们可以点击网页左侧的选项--全部港股,然后点击下方下一页,此时在工具列表底部会弹出一个新的网页链接,点击这个链接,查看它的Response即返回信息,发现其返回信息和我们所分析的网页的信息相同,这就是我们所需信息对应的真实链接,如下图:
3.点击Response旁的Headers,可以看到网页的请求方式
如红色方框标记所示,该网页的请求方式为Get,同时注意到URL地址为:http://hkquote.stock.hexun.com/hqzx/restHKStockQuote_new.ashx?type=100&sorttype=3&updown=up&page=1&count=50&input=2&time=171700,将其粘贴复制到浏览器中打开,打开后显示的即为我们需要的信息,如图:
而这个URL地址的格式符合我们抓取多个网页的要求,因为它的网址中出现了可以识别不同页数的参数page。
我们通过以上步骤分析得到了我们需要的目标信息的真实链接,下面需要做的就是在Stata中利用copy命令抓取网页源代码,输入如下命令:
clear
cap mkdir E:/爬虫
cd E:/爬虫
copy "http://hkquote.stock.hexun.com/hqzx/restHKStockQuote_new.ashx?type=100&sorttype=0&updown=down&page=1&count=50&input=2&time=171700" temp1.txt,replace
shellout temp1.txt
得到如图所示的源代码:
需要注意的是,这里我们对网页的真实链接中的参数sorttype和updown进行了修改,将sorttype=3改为了sorttype =0,sorttype=3 是指按照涨跌幅进行排序,由于涨跌幅是时刻变化的,这会导致我们抓取到的网页有重复信息,而sorttype =0则是按照港股代码排序,代码是固定不变的不会实时更新。将updown=up改为了updown =down,后者是指将港股按照代码从小到大进行排序。参数page =1表示抓取的是网页的第一页,count=50表示网页中展示了50条港股信息,input =2表示按照绿涨红跌进行颜色标识,time表示访问网页的时间。
这样一来,和讯网港股中按照股票代码进行排序的网页源代码就保存在自己电脑中了,如果需要对多个网页进行抓取,只需再对网址的page做一个循环即可。
没看懂记得戳下方视频学习哦!
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做 事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:闫续文
技术总编:刘贝贝
往期推文推荐:
5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件
6.putdocx+wordconvert—将实证结果输出到Word(.docx)文档
7.Stata 15之Markdown——没有做不到,只有想不到!
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号