Excel VBA 抓取SEO常规数据

2013-12-05
  • 1659
  • 0
SEO项目执行中,通常需要查看数据报告来反映项目表现情况,例如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍采用VBA的方式,从网页端抓取网站基础数据。通过建立自动化数据报表系统,提升SEO数据汇总工作的效率。 使用Excel VBA的方式获取搜索引擎官方、第三方网站的数据需要解决以下基础技术问题(更多复杂情况以后再讨论,例如需要登录才能查询的情况等): 1. 如何在网页代码中找到目标数据(通过查看源代码,精确定位目标数据的位置) 2. 使用VBA代码得到数据(使用Microsoft.XMLHTTP等对象) 3. 字符串处理,得到目标数据(使用replace、splite等函数处理) 本次将演示如何使用VBA编写自定义函数,从百度获取收录量的数据。其他的基础数据抓取原理基本相同,暂不赘述。在此以新东方(www.xdf.cn)为例,按照刚才提到的技术环节逐一讲解。 1. 找到目标数据 在百度中使用site:xdf.cn命令可以返回查询结果,如上图所示,可以看到收录量为4,890,000。在火狐中使用Firebug插件,查看源代码,该结果出现在如下图所示蓝色区块的位置,我们要收集的数据就存在于网页HTML代码中。 2. 使用Microsoft.XMLHTTP对象获取网页数据,并用split函数进行文本处理 上图是函数代码(源代码请见下文),通过该方法可以快速的查询目标网页的收录数据。首先,定义URL参数作为函数的输入值,字符类型是String(字符串)类型;再定义htmlBody变量,用来储存网站HTML代码。 接下来比较重要的一步,定义和声明htmlObject对象,并使用With方法配置查询地址、原始数据初步清理等工作。其中Replace函数的作用是,把网页源码中回车符和换行符(vbCrLf)删除,便于下一步Split函数处理。 在得到简单处理的网页数据后,得到一份网页HTML代码,这段代码储存在htmlBody变量中,我们要取的收录数据就保存在其中。在第一步时,我们已经查看过网站源代码,网站的收录数量就包含在语句中:“找到相关结果数4,890,000个。“,使用split函数进行两次文本截取就可以将最终的收录数量提取出来。Split函数用法请大家自行百度。 由此,我们编写完成了一个简单的收录查询函数。在Excel中使用时只需要在任意单元格中输入“=baiduIndex(“xdf.cn”)”,回车后在表格中就会自动返回该收录数据。 到此,一个简单的查询函数编写过程基本结束。该方法虽然省去了频繁手动查询数据的麻烦,但是用函数获取数据的方法还存在诸多不便: 1. 函数维护成本较大。百度或者第三方网站的前端代码更新后,查询语句需要相应变化,在使用中还是会偶尔遇到需要更新split函数的情况。 2. 无法批量自动化。在做SEO项目中,我们需要查询多种数据,包括收录、PR、排名、BR等数据做成一份周报或者月报。通常收录又包含很多不同栏目、竞争对手网址等。用函数的方法在批量查询时效率还是不高。 当然,还是有解决办法的,可以结合Excel窗体控件,与VBA代码结合,通过一键操作,完成项目周报数据的查询。实现这样的功能需要更加复杂的VBA代码。在今后的文章中,我们再继续讨论。因时间有限,里面一些技术细节没有做过多解释,希望大家回帖讨论,如果有对SEO数据分析感兴趣的朋友,欢迎讨论。 =======源代码====== Function BaiduIndex(url As String) '定义函数名称 Dim htmlBody '定义string变量,用来存储网页源代码 Dim htmlObject As Object '定义对象变量 Set htmlObject = CreateObject("microsoft.xmlhttp") With htmlObject .Open "GET", "http://www.baidu.com/s?wd=site:" & url, False  '百度收录量查询地址 .send htmlBody = Replace(.responsetext, vbCrLf, "") End With BaiduIndex = Split(Split(htmlBody, "找到相关结果数")(1), "个")(0)  '原始代码中提取目标数据 End Function

 

 

SEO项目执行中,通常需要查看数据报告来反映项目表现情况,例如网站收录、域名PR、预估流量、Alexa排名等。本文将介绍采用VBA的方式,从网页端抓取网站基础数据。通过建立自动化数据报表系统,提升SEO数据汇总工作的效率。

使用Excel VBA的方式获取搜索引擎官方、第三方网站的数据需要解决以下基础技术问题(更多复杂情况以后再讨论,例如需要登录才能查询的情况等):

1. 如何在网页代码中找到目标数据(通过查看源代码,精确定位目标数据的位置)

2. 使用VBA代码得到数据(使用Microsoft.XMLHTTP等对象)

3. 字符串处理,得到目标数据(使用replace、splite等函数处理)

本次将演示如何使用VBA编写自定义函数,从百度获取收录量的数据。其他的基础数据抓取原理基本相同,暂不赘述。在此以新东方(www.xdf.cn)为例,按照刚才提到的技术环节逐一讲解。

1. 找到目标数据

在百度中使用site:xdf.cn命令可以返回查询结果,如上图所示,可以看到收录量为4,890,000。在火狐中使用Firebug插件,查看源代码,该结果出现在如下图所示蓝色区块的位置,我们要收集的数据就存在于网页HTML代码中。

2. 使用Microsoft.XMLHTTP对象获取网页数据,并用split函数进行文本处理

上图是函数代码(源代码请见下文),通过该方法可以快速的查询目标网页的收录数据。首先,定义URL参数作为函数的输入值,字符类型是String(字符串)类型;再定义htmlBody变量,用来储存网站HTML代码。

接下来比较重要的一步,定义和声明htmlObject对象,并使用With方法配置查询地址、原始数据初步清理等工作。其中Replace函数的作用是,把网页源码中回车符和换行符(vbCrLf)删除,便于下一步Split函数处理。

在得到简单处理的网页数据后,得到一份网页HTML代码,这段代码储存在htmlBody变量中,我们要取的收录数据就保存在其中。在第一步时,我们已经查看过网站源代码,网站的收录数量就包含在语句中:“找到相关结果数4,890,000个。“,使用split函数进行两次文本截取就可以将最终的收录数量提取出来。Split函数用法请大家自行百度。

由此,我们编写完成了一个简单的收录查询函数。在Excel中使用时只需要在任意单元格中输入“=baiduIndex(“xdf.cn”)”,回车后在表格中就会自动返回该收录数据。

到此,一个简单的查询函数编写过程基本结束。该方法虽然省去了频繁手动查询数据的麻烦,但是用函数获取数据的方法还存在诸多不便:

1. 函数维护成本较大。百度或者第三方网站的前端代码更新后,查询语句需要相应变化,在使用中还是会偶尔遇到需要更新split函数的情况。

2. 无法批量自动化。在做SEO项目中,我们需要查询多种数据,包括收录、PR、排名、BR等数据做成一份周报或者月报。通常收录又包含很多不同栏目、竞争对手网址等。用函数的方法在批量查询时效率还是不高。

当然,还是有解决办法的,可以结合Excel窗体控件,与VBA代码结合,通过一键操作,完成项目周报数据的查询。实现这样的功能需要更加复杂的VBA代码。在今后的文章中,我们再继续讨论。因时间有限,里面一些技术细节没有做过多解释,希望大家回帖讨论,如果有对SEO数据分析感兴趣的朋友,欢迎讨论。

=======源代码======

Function BaiduIndex(url As String) '定义函数名称

Dim htmlBody '定义string变量,用来存储网页源代码

Dim htmlObject As Object '定义对象变量

Set htmlObject = CreateObject("microsoft.xmlhttp")

With htmlObject

.Open "GET", "http://www.baidu.com/s?wd=site:" & url, False  '百度收录量查询地址

.send

htmlBody = Replace(.responsetext, vbCrLf, "")

End With

BaiduIndex = Split(Split(htmlBody, "找到相关结果数")(1), "个")(0)  '原始代码中提取目标数据

End Function