<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[以Excel VBA实现对网页中Table的爬虫 --- Part 1]]></title><description><![CDATA[<p dir="auto">1.需求与基本概念：</p>
<p dir="auto">1.1 需求：<br />
在我们平时的工作当中，往往会需要去获取一些诸如国债收益率的信息，而这些信息是写在官网的table上面的，需要我们手动去复制粘贴出来，非常浪费时间。因此就有利用爬虫(crawler)去自动获取的需求。</p>
<p dir="auto">1.2 爬虫的概念：</p>
<p dir="auto"><img src="/assets/uploads/files/1745756323089-c560acf3-52e4-4264-990f-2095d0424d83-image.png" alt="c560acf3-52e4-4264-990f-2095d0424d83-image.png" class="img-responsive img-markdown" /></p>
<p dir="auto">写爬虫的方法在不同的语言当中不尽相同，有用python的，也有用java的，而就工作实用性而言，VBA相对容易获得，毕竟不需要再去安装python的语言包。本文仅介绍基于EXCEL VBA对table的爬虫方法。</p>
<p dir="auto">2.基本方法介绍：</p>
<p dir="auto">2.1 XMLHTTP对象：<br />
XMLHTTP对象在VBA中用于在后台与服务器（Server）交换数据。</p>
<p dir="auto">XMLHTTP对象能够：<br />
在不重新加载页面的情况下更新网页<br />
在页面已加载后从服务器请求数据<br />
在页面已加载后从服务器接收数据<br />
在后台向服务器发送数据</p>
<p dir="auto">2.2 XMLHTTP对象及方法介绍：<br />
i. 定义XMLHTTP对象：</p>
<pre><code>Set xml = CreateObject("microsoft.xmlhttp")
'调用网络访问组件，相当于双击打开浏览器
</code></pre>
<p dir="auto">ii. Open方法：</p>
<pre><code>xml.Open "get", strURL, False
'strURL代表网址字符串,这一步相当于打开网页
</code></pre>
<p dir="auto">语法介绍：<br />
<code>open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)</code><br />
<code>bstrMethod</code>： 数据传送方式，即<code>GET</code>或<code>POST</code>。用<code>POST</code>方式发送数据,可以大到4MB，也可以换为<code>GET</code>，只能256KB。<br />
<code>bstrUrl</code>： 服务网页的URL。<br />
<code>varAsync</code>： 是否同步执行。缺省为True，即同步执行，但只能在DOM中实施同步执行。用中一般将其置为False，即异步执行。<br />
<code>bstrUser</code>： 用户名，可省略。<br />
<code>bstrPassword</code>：用户口令，可省略。</p>
<p dir="auto">iii. Send方法：</p>
<pre><code>xml.send'提交请求，类似于回车'
</code></pre>
<p dir="auto"><code>send(varBody)</code><br />
语法介绍：<br />
<code>varBody</code>：指令集。可以是XML格式数据，也可以是字符串，流，或者一个无符号整数数组。也可以省略，让指令通过Open方法的URL参数代入。发送数据的方式分为同步和异步两种。在异步方式下，数据包一旦发送完毕，就结束Send进程，客户机执行的操作；而在同步方式下，客户机要等到服务器返回确认消息后才结束Send进程。</p>
<p dir="auto">iv. responsetext属性：</p>
<pre><code>s = xml.responsetext'responsetext得到网页字符串'
</code></pre>
<p dir="auto"><code>xml.responseText</code><br />
string型 结果返回为字符串。</p>
<p dir="auto">这一步就相当于返回了网页字符串，这个过程也可以手动显示出来，这个在后面写正则表达式(regex)的时候将会非常有用：<br />
首先打开网页，输入对应的网址<br />
以美债国库券Yield Curve为例：<a href="https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&amp;field_tdr_date_value=2025" rel="nofollow">https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&amp;field_tdr_date_value=2025</a><br />
然后按<code>F12</code>，这样就可以显示出来网页的code。<br />
<img src="/assets/uploads/files/1745758801836-58f1f8e6-82ed-4602-a15a-fad66868d89e-image.png" alt="58f1f8e6-82ed-4602-a15a-fad66868d89e-image.png" class="img-responsive img-markdown" /><br />
然后我们可以找得到这个Table对应的code：&lt;table&gt;***&lt;/table&gt;这一段，我们可以把这个copy出来方便我们之后写正则表达式。<br />
<img src="/assets/uploads/files/1745758870776-6daad06f-9735-453a-840f-863a72729305-image.png" alt="6daad06f-9735-453a-840f-863a72729305-image.png" class="img-responsive img-markdown" /><br />
根据网页字符串的写法，&lt;tr&gt;...&lt;tr&gt;就代表一行中间的内容，有多少行就会有多少个&lt;tr&gt;...&lt;tr&gt;。这个我们之后介绍正则表达式的时候再去详细介绍。<br />
<img src="/assets/uploads/files/1745759175580-b942066e-0912-4b71-9fe9-65b85c22e5ad-image.png" alt="b942066e-0912-4b71-9fe9-65b85c22e5ad-image.png" class="img-responsive img-markdown" /><br />
所以到现在为止，我们介绍了如何利用XLMHTTP对象访问网页并且返回网页字符串。那么如何从这些字符串当中提取想要的信息呢？请关注博主的第二篇帖子。</p>
]]></description><link>https://actuarygarden.com/topic/290/以excel-vba实现对网页中table的爬虫-part-1</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 21:39:39 GMT</lastBuildDate><atom:link href="https://actuarygarden.com/topic/290.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Apr 2025 13:14:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 以Excel VBA实现对网页中Table的爬虫 --- Part 1 on Sun, 27 Apr 2025 13:20:00 GMT]]></title><description><![CDATA[<p dir="auto">1.需求与基本概念：</p>
<p dir="auto">1.1 需求：<br />
在我们平时的工作当中，往往会需要去获取一些诸如国债收益率的信息，而这些信息是写在官网的table上面的，需要我们手动去复制粘贴出来，非常浪费时间。因此就有利用爬虫(crawler)去自动获取的需求。</p>
<p dir="auto">1.2 爬虫的概念：</p>
<p dir="auto"><img src="/assets/uploads/files/1745756323089-c560acf3-52e4-4264-990f-2095d0424d83-image.png" alt="c560acf3-52e4-4264-990f-2095d0424d83-image.png" class="img-responsive img-markdown" /></p>
<p dir="auto">写爬虫的方法在不同的语言当中不尽相同，有用python的，也有用java的，而就工作实用性而言，VBA相对容易获得，毕竟不需要再去安装python的语言包。本文仅介绍基于EXCEL VBA对table的爬虫方法。</p>
<p dir="auto">2.基本方法介绍：</p>
<p dir="auto">2.1 XMLHTTP对象：<br />
XMLHTTP对象在VBA中用于在后台与服务器（Server）交换数据。</p>
<p dir="auto">XMLHTTP对象能够：<br />
在不重新加载页面的情况下更新网页<br />
在页面已加载后从服务器请求数据<br />
在页面已加载后从服务器接收数据<br />
在后台向服务器发送数据</p>
<p dir="auto">2.2 XMLHTTP对象及方法介绍：<br />
i. 定义XMLHTTP对象：</p>
<pre><code>Set xml = CreateObject("microsoft.xmlhttp")
'调用网络访问组件，相当于双击打开浏览器
</code></pre>
<p dir="auto">ii. Open方法：</p>
<pre><code>xml.Open "get", strURL, False
'strURL代表网址字符串,这一步相当于打开网页
</code></pre>
<p dir="auto">语法介绍：<br />
<code>open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)</code><br />
<code>bstrMethod</code>： 数据传送方式，即<code>GET</code>或<code>POST</code>。用<code>POST</code>方式发送数据,可以大到4MB，也可以换为<code>GET</code>，只能256KB。<br />
<code>bstrUrl</code>： 服务网页的URL。<br />
<code>varAsync</code>： 是否同步执行。缺省为True，即同步执行，但只能在DOM中实施同步执行。用中一般将其置为False，即异步执行。<br />
<code>bstrUser</code>： 用户名，可省略。<br />
<code>bstrPassword</code>：用户口令，可省略。</p>
<p dir="auto">iii. Send方法：</p>
<pre><code>xml.send'提交请求，类似于回车'
</code></pre>
<p dir="auto"><code>send(varBody)</code><br />
语法介绍：<br />
<code>varBody</code>：指令集。可以是XML格式数据，也可以是字符串，流，或者一个无符号整数数组。也可以省略，让指令通过Open方法的URL参数代入。发送数据的方式分为同步和异步两种。在异步方式下，数据包一旦发送完毕，就结束Send进程，客户机执行的操作；而在同步方式下，客户机要等到服务器返回确认消息后才结束Send进程。</p>
<p dir="auto">iv. responsetext属性：</p>
<pre><code>s = xml.responsetext'responsetext得到网页字符串'
</code></pre>
<p dir="auto"><code>xml.responseText</code><br />
string型 结果返回为字符串。</p>
<p dir="auto">这一步就相当于返回了网页字符串，这个过程也可以手动显示出来，这个在后面写正则表达式(regex)的时候将会非常有用：<br />
首先打开网页，输入对应的网址<br />
以美债国库券Yield Curve为例：<a href="https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&amp;field_tdr_date_value=2025" rel="nofollow">https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&amp;field_tdr_date_value=2025</a><br />
然后按<code>F12</code>，这样就可以显示出来网页的code。<br />
<img src="/assets/uploads/files/1745758801836-58f1f8e6-82ed-4602-a15a-fad66868d89e-image.png" alt="58f1f8e6-82ed-4602-a15a-fad66868d89e-image.png" class="img-responsive img-markdown" /><br />
然后我们可以找得到这个Table对应的code：&lt;table&gt;***&lt;/table&gt;这一段，我们可以把这个copy出来方便我们之后写正则表达式。<br />
<img src="/assets/uploads/files/1745758870776-6daad06f-9735-453a-840f-863a72729305-image.png" alt="6daad06f-9735-453a-840f-863a72729305-image.png" class="img-responsive img-markdown" /><br />
根据网页字符串的写法，&lt;tr&gt;...&lt;tr&gt;就代表一行中间的内容，有多少行就会有多少个&lt;tr&gt;...&lt;tr&gt;。这个我们之后介绍正则表达式的时候再去详细介绍。<br />
<img src="/assets/uploads/files/1745759175580-b942066e-0912-4b71-9fe9-65b85c22e5ad-image.png" alt="b942066e-0912-4b71-9fe9-65b85c22e5ad-image.png" class="img-responsive img-markdown" /><br />
所以到现在为止，我们介绍了如何利用XLMHTTP对象访问网页并且返回网页字符串。那么如何从这些字符串当中提取想要的信息呢？请关注博主的第二篇帖子。</p>
]]></description><link>https://actuarygarden.com/post/606</link><guid isPermaLink="true">https://actuarygarden.com/post/606</guid><dc:creator><![CDATA[jonathan-jiang]]></dc:creator><pubDate>Sun, 27 Apr 2025 13:20:00 GMT</pubDate></item></channel></rss>