打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
厉害了,我stata哥

例如我们用百度搜索引擎搜索天宫二号的新闻。


可以看到在新闻搜索结果中的第一行有这样一栏:找到相关新闻约1,030,000篇。现在我们就要将这些内容爬取下,先让我们看下网页源代码。


在网页源代码中我们能够看到我们需要抓取的内容:找到相关新闻约1,030,000篇。因此我们可以将其抓取,第一步是找到其网页地址。

http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=天宫二号

通过网址链接我们可以看到长长的一大串似乎没任何规律,但仔细阅读我们可以发现,网址链接中的每个字符都是有其特殊含义的:

ns(News Search)新闻搜索;

cl(Class):搜索类型,cl=3为网页搜索,cl=2为图片搜索;

rn(Record Number):搜索结果显示条数,缺省设置rn=10,取值范围:10-100

tn:提交搜索请求的来源站点,本例中的来源就是news

word:查询的关键词;

分隔实际的网页链接和参数;

&:参数间的分隔符。

通过以上了解我们可以看到word=”才是该网页链接的核心。于是我们将网页链接转换成:

http://news.baidu.com/ns?word=天宫二号


可以看到新闻搜索结果的下的第一栏为:找到相关新闻约1,030,000篇,这与我们最初的网页链接搜索结果一致,因此该方法可行。

之后我们再将word=”后的内容替换。


可以看出百度新闻搜索显示我们希望得到的搜索结果。这样,我们就从链接中找到了规律,满足了我们批量处理的要求。因此下一步我们就可以进行批量抓取百度新闻的相关新闻数。比如我们现在有如下五个关键词,要抓取相关搜索数量。


我们运用levelsof命令对关键词进行批量的处理,通过'找到相关新闻约'这段字符定位我们提取信息所在的行,再用正则表达式提取我们需要的信息。因为百度新闻量会更新,所以我们在抓取时设置两个变量分别为抓取的日期(date)和时间(time),最后将这些信息运用post命令处理,并且除去数字中间的逗号,将“百度新闻量”变量转化为数值型,就得到了以下结果:


do-file如下:

clear

set more off

use 'd:\关键词.dta',clear

capture postclose baidu

postfile baidu str20 date str20 time str20 关键词 str20 百度新闻量 ///

    using 'd:\baidu.dta',replace

levelsof keyword,local(levels)

foreach c of local levels {

     copy 'http://news.baidu.com/ns?word=`c'' 'd:\temp.txt',replace

     infix strL v 1-200000 using 'd:\temp.txt',clear

    keep if index(v,'找到相关新闻约')

    replace v = ustrregexs(1) if ustrregexm(v,'约(.+?)篇')

    disp '`c''

    local date = c(current_date)

    dis '`date''

   local time = c(current_time)

   disp '`time''

   post baidu ('`date'') ('`time'') ('`c'') (v[1])

   }

postclose baidu

use 'd:\baidu.dta',clear

replace 百度新闻量 = ustrregexra(百度新闻量,',','')

destring 百度新闻量,replace

当前百度新闻搜索量的抓取还存在一些小的问题。当我们连续点击搜索键的时候,发现两次结果并非一样。第一次结果为“找到相关新闻约1,040,000篇”,第二次结果“找到相关新闻约1,120,000篇”,两个网页地址不相同,我们来分析第二个网页地址。

http://news.baidu.com/ns?ct=1&ie=utf-8&bs=天宫二号&rsv_bp=1&sr=0&cl=2&f=8&prevct=no

&tn=news&word=天宫二号



ct:语言限制。0-所有语言,1-简体中文网页,2-繁体中文网页;其它不确定或者无效或。默认值为0

ie(Input Encoding):查询输入文字的编码,缺省设置ie=gb2312,即为简体中文;

bs(Before Search):上一次搜索的关键词,估计与相关搜索有关;

rsv_bp:判断是第几次搜索,0为第一次搜索,1为第二次或者多次搜索;

sr:结合bs使用。一般查询sr=0或者为空值,但sr=1时,查询将结合bs的值一起作为查询的关键字。默认值为0,除01外其它值无效。

因此第一种的搜索结果是在默认设置的情况下得出,第二种的搜索结果是加上条件限制的,因此二者的搜索结果数不同。

此外当我们从地址栏复制网页地址http://news.baidu.com/ns?word=天宫二号”的时候,网页地址自动生成http://news.baidu.com/ns?word=%E5%A4%A9%E5%AE%AB%E4%BA%8C%E5%8F%B7。其中“%E5%A4%A9%E5%AE%AB%E4%BA%8C%E5%8F%B7”这部分看起来杂乱无章,但熟悉url编码的朋友能够看出这里其实是采用了百分比编码。这里面又有怎样的奥秘呢?继续关注我们的“爬虫俱乐部”公众号,在今后的推文我们再来着重介绍该部分的内容。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
百度搜索技巧
搜索引擎知识
网络搜索信息小窍门
英语老师不想让你知道的一些网站
百度搜索结果网页参数?wd|word|kw|keyword
快捷键小工具使用介绍
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服