Perl web scraper,从DIV中提取只有"样式"标签的内容?

Ric*_*ick 4 perl parsing web-scraping

我一直都坚持这一点并且已经整整一天..我仍然非常擅长在perl中解析/抓取但我认为我已经把它解决了这个...我一直在用不同的perl模块尝试这个(tokeparser,tokeparser:简单,网络解析器和其他一些)...我有以下字符串(实际上实际上是一个完整的HTML页面,但这只是显示相关的部分..我试图提取"text1"和"text1_a".等等("text1"等只是作为一个例子放在那里)...所以基本上我认为我需要先从每个中提取这个:

"<span style="float: left;">test1</span>test1_a"
Run Code Online (Sandbox Code Playgroud)

然后解析这个以获得2个值..我不知道为什么这给了我这么多麻烦因为我认为我可以在tokeparser中做到这一点:简单但我似乎无法返回DIV内部的值,我想知道它是否因为它包含另一组标签(标签)

string(代表html网页)

<div id="dataID" style="font-size: 8.5pt; width: 250px; color: rgb(0, 51, 102); margin-right: 10px; float: right;">
<div style="width: 250px; text-align: right;"><span style="float: left;">test1</span>test1_a</div>
<div style="width: 250px; text-align: right;"><span style="float: left;">test2</span>test2_a</div>
<div style="width: 250px; text-align: right;"><span style="float: left;">test3</span>test3_a</div>
Run Code Online (Sandbox Code Playgroud)

我在perl web解析器模块中的尝试:

my $uri  = URI->new($theurl);

my $proxyscraper = scraper {
process 'div[style=~"width: 250px; text-align: right;"]',
'proxiesextracted[]' => scraper {
process '.style',  style => 'TEXT';
};
result 'proxiesextracted';
Run Code Online (Sandbox Code Playgroud)

我只是盲目地试图理解web:解析器模块,因为它基本上没有文档,所以我只是将它们与模块中包含的示例和我在互联网上找到的示例拼凑在一起..任何建议非常感谢.

Eva*_*oll 5

如果你想要一个DOM解析器(更容易使用树浏览,稍慢).试试HTML :: TreeBuilder

HTML :: Element手册页(包含模块)

Note also that look_down considers "" (empty-string) and undef to be
Run Code Online (Sandbox Code Playgroud)

属性值中的不同事物.所以这:

  $h->look_down("alt", "")
Run Code Online (Sandbox Code Playgroud)

这导致我们得到你的答案:

use HTML::TreeBuilder;

# check html::treebuilder pod, there are a few ways to construct (file, fh, html string)
my $tb = HTML::TreeBuilder->new_from_(constructor)

$tb->look_down( _tag => 'div', style => '' )->as_text;
Run Code Online (Sandbox Code Playgroud)

  • HTML :: TreeBuilder是我唯一使用的.它非常好地处理坏HTML,并且使用起来更加容易,开发速度更快.如果您的任务很简单,那么Tokeparsing要快得多 - 但速度可能并不重要. (2认同)