当用户通过web浏览器登录到Internet时,他们会向Web服务器请求一个网页。服务器收到请求后,会做出响应,将设置好的页面文档发送到网页浏览器的显示界面,这是一个完整的网页请求和处理的过程。网页抓取就是在代码过程中尽可能的模拟这个交互过程。
首先,在Excel中使用VBA可以抓取网站数据。
其次,无论是使用Python、java还是VBA来抓网,都需要对HTTP协议、HTML(HyperTextMarkupLanguage)和DOM(DocumentObjectModel)有初步的了解。
此外,还介绍了一个软件提琴手。网页抓取的成功需要一个准确真实的网站,模拟正确的请求消息,分析服务器响应请求后返回的信息,这些数据都可以通过Fiddler软件获得。通过Fiddler可以很方便的找到内容所在的网站。
今天就来简单介绍一下如何获取百度查询结果——抓取百度查询结果的数量。
1.首先打开Fiddler软件,在浏览器中打开百度网站,搜索关键词“网络爬虫”。
2.在Fiddler软件中搜索“百度为你找到了相关结果”,如下图所示。
3.单击对话框中的第一个黄色数据,然后单击右侧请求框中的[Raw]按钮,查看发送请求的HTTP消息的详细数据。请求的第一行如下。
开头的GET是请求方法字段,结尾的HTTP/1.1是协议版本字段,其余信息是URL字段。因为请求行使用GET方法,所以请求数据被附加到带有“?”的URL上分开的URL和请求数据,其中多个参数由“&”连接。
虽然传输数据的参数很多,但并不是所有的参数都是必须的。在请求框中选择【WebForms】页签,可以查看多个参数的名称和对应的值,其中百度搜索的关键词“网络爬虫”位于参数wd下,如下图所示。因此,URL可以简化如下。
4.点击请求框中的【Raw】按钮可以查看响应消息的详细数据,点击框右下角的【ViewinNotepad】按钮可以将相关数据转换成记事本的文件形式。在记事本中,搜索关键词“百度为你找到相关结果”,查看包含该关键词的相关数据。
示例代码如下。
第8行使用Open方法创建一个HTTP请求。Open方法的语法格式如下。
其中,参数bstrMethod表示HTTP的请求方法,本例中使用了GET方法。
参数bstrURL表示请求的地址。
参数varAsync是可选的,它的值是Boolean,表示请求是否是异步的。默认值为True,这意味着由onReadyStatusChange属性指定的回调函数将在其状态更改时被调用。在VBA中,通常建议将该参数设置为False,表示请求是同步的,即在接收到返回的数据后将运行下一条语句。
参数varuser和varpassword是可选参数,指示服务器身份验证期间的用户名和密码。
第9行代码使用Send方法发送HTTP请求并接收响应。
10行代码使用ResponseText属性以字符串形式返回响应信息,并将其提供给HTMLDocument对象的body元素。
第13行代码使用Split函数获取所需的目标数据。
程序运行结果如下图所示。
网友评论