vba抓取网页数据(Scraping程序仅处理一种类型的请求:名为/的资源的GET)

优采云 发布时间: 2021-11-10 10:04

  vba抓取网页数据(Scraping程序仅处理一种类型的请求:名为/的资源的GET)

  Scraping 程序只处理一种类型的请求:对名为 / 的资源进行 GET,它是 Stats::Controller 包中的屏幕截图和数据处理代码。供您检查的是 Plack/PSGI 路由设置,它位于源文件 scrape.pl 的顶部:

  

my

$router

= router

{

<br />

    match

&#39;/&#39;

,

{ method

=>

&#39;GET&#39;

}

,  

## noun/verb combo: / is noun, GET is verb

<br />

    to

{ controller

=>

&#39;Controller&#39;

, action

=>

&#39;index&#39;

}

;

## handler is function get_index

<br />

   

# Other actions as needed

<br />

}

;

  请求处理程序 Controller::get_index 只有高级逻辑,在 Util.pm 文件中的实用程序函数中保留了屏幕捕获和报告生成的详细信息,如下一节所述。

  屏幕截图代码

  回想一下,Plack 服务器向 Scraping 程序的 get_index 函数发送了一个对 localhost:5000/ 的 GET 请求。然后,该函数作为请求处理程序开始执行以下任务:检索要抓取的数据,抓取数据并生成最终报告。数据检索部分是一个实用函数,它使用 Perl 的 LWP::Agent 包从托管 data.html 文档的任何服务器检索数据。对于数据文件,Scraping 程序将调用实用函数extract_from_html 进行数据提取。

  data.html 文档恰好是格式良好的 XML,这意味着可以使用 Perl 包(例如 XML::LibXML)通过显式 XML 解析来提取数据。然而,HTML::TableExtract 包是 HTML::TableExtract,因为它 HTML::TableExtract 绕过 XML 解析并且(用很少的代码)提供用于提取数据的 Perl 哈希。HTML 文档中的数据聚合通常出现在列表或表格中,而 HTML::TableExtract 封装 HTML ::TableExtract 表格​​是目标。这些是数据提取的三行关键代码:

  

my

$col_headers

= col_headers

(

)

;

## col_headers() returns an array of the table&#39;s column names

<br />

my

$te

= HTML

::

TableExtract

->

new

( headers

=>

$col_headers

)

;

<br />

$te

->

parse

(

$page

)

;  

## $page is data.html

  $col_headers 指的是 Perl 字符串数组,每个字符串都是 HTML 文档中的一个列标题:

  

sub col_headers

{    

## column headers in the HTML table

<br />

   

return

[

"Area"

,

<br />

           

"MedianWage"

,

<br />

           

...

<br />

           

"BoostFromGradDegree"

]

;

<br />

}

  在调用 TableExtract::parse 函数后,Scraping 程序将使用 TableExtract::rows 函数对提取的数据行(没有 HTML 标记的数据行)进行迭代。这些行(作为 Perl 列表)被添加到名为 %majors_hash 的 Perl 哈希中,如下所示:

  收录提取数据的哈希将写入本地文件 rawData.dat:

  

ForeignLanguage 50000 35000 75000 3.5% 54% 101%

<br />

LiberalArts 47000 32000 70000 9.7% 41% 48%

<br />

...

<br />

Engineering 78000 54000 104000 8.2% 37% 32%

<br />

Computing 75000 51000 112000 5.1% 32% 31%

<br />

...

<br />

PublicPolicy 50000 36000 74000 2.3% 24% 45%

  下一步是处理提取的数据。在这种情况下,Statistics::Descriptive 包将用于基本的统计分析。在上面的图 1 中,统计摘要显示在报告底部的单独表格中。

  报告生成代码

  Scraping 程序的最后一步是生成报告。Perl 有用于生成 HTML 的选项,包括 Template::Recall。顾名思义,该包从 HTML 模板生成 HTML,该模板混合了标准 HTML 标签和自定义标签,用作从后端代码生成的数据的占位符。模板文件是report.html,感兴趣的后端函数是Controller::generate_report。这就是代码与模板交互的方式。

  报表文档(图1)有两张表。顶层表是迭代生成的,因为每一行都有相同的列(学习区域,第25个百分位收入等)。在每次迭代中,代码都会使用特定学习区域的值来创建哈希值:

  

my

%row

=

(

<br />

     major

=>

$key

,

<br />

     wage  

=>

&#39;$&#39;

. commify

(

$values

[

]

)

,

## commify turns 1234 into 1,234

<br />

     p25  

=>

&#39;$&#39;

. commify

(

$values

[

1

]

)

,

<br />

     p75  

=>

&#39;$&#39;

. commify

(

$values

[

2

]

)

,

<br />

     population  

=>

$values

[

3

]

,

<br />

     grad  

=>

$values

[

4

]

,

<br />

     boost

=>

$values

[

5

]

<br />

)

;

  哈希键是 Perl 的裸词作为列表项,这样major 和wage 代表之前从HTML 数据文档中提取的数据值。对应的HTML模板如下:

  

[ === even  === ]

<br />

<br />

   [&#39;major&#39;]

<br />

   [&#39;p25&#39;]

<br />

   [&#39;wage&#39;]

<br />

   [&#39;p75&#39;]

<br />

   [&#39;pop&#39;]

<br />

   [&#39;grad&#39;]

<br />

   [&#39;boost&#39;]

<br />

<br />

[=== end1 ===]

  自定义标签在方括号中。顶部和底部的标签分别标记了要渲染的模板区域的开始和结束。其他自定义标签标识后端代码的各种目标。例如,标识为主要的模板列将匹配以主要作为键的哈希条目。这是后端代码中的调用,它将数据绑定到自定义标签:

   print OUTFILE $tr -> render ( &#39;end1&#39; ) ;

  引用$tr指向Template::Recall实例,OUTFILE是报表文件reportFinal.html,由模板文件report.html连同后端代码生成。如果一切顺利,reportFinal.html 文件就是用户在浏览器中看到的(见图 1).

  爬虫利用优秀的Perl软件包,如Plack/PSGI、LWP::Agent、HTML::TableExtract、Template::Recall和Statistics::Descriptive来处理HTML::TableExtract的屏幕数据抓取任务。这些包可以很好地协同工作,因为每个包都针对特定的子任务。最后,可以扩展Scraping程序对提取的数据进行聚类:Algorithm::KMeans软件包适用于这种扩展,可以使用rawData.dat文件中的Algorithm::KMeans数据。

  翻译自:

  vba 数据捕获屏幕数据

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线