Perl web scraper,从只有;“风格”;标签?
我被这件事缠住了,已经一整天了。。我对perl中的解析/抓取还是相当陌生的,但我认为直到今天我才了解它。。我一直在用不同的perl模块(tokeparser、tokeparser:simple、web parser和其他一些模块)尝试这一点。。。我有以下字符串(实际上是一个完整的HTML页面,但这只是显示相关部分..我试图提取“text1”和“text1_a.”等等(“text1”等只是作为一个例子放在那里..所以基本上我认为我需要先从每个页面中提取这个:Perl web scraper,从只有;“风格”;标签?,perl,parsing,web-scraping,Perl,Parsing,Web Scraping,我被这件事缠住了,已经一整天了。。我对perl中的解析/抓取还是相当陌生的,但我认为直到今天我才了解它。。我一直在用不同的perl模块(tokeparser、tokeparser:simple、web parser和其他一些模块)尝试这一点。。。我有以下字符串(实际上是一个完整的HTML页面,但这只是显示相关部分..我试图提取“text1”和“text1_a.”等等(“text1”等只是作为一个例子放在那里..所以基本上我认为我需要先从每个页面中提取这个: "<span style="fl
"<span style="float: left;">test1</span>test1_a"
我只是有点盲目地试图理解web:parser模块,因为它基本上没有文档,所以我只是从模块中包含的示例和我在互联网上找到的示例中拼凑起来。任何建议都非常感谢。如果您想要DOM解析器(更易于使用树浏览,速度稍慢).试试看
手册页(包括模块)
不同的东西,在属性值中。
因此:
$h->look_down("alt", "")
这就引出了你的答案:
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;
使用,请尝试:
希望这能有所帮助谢谢..是的,我只是有点搞不清楚什么解析器是正确的,因为有不同的解析器…我会研究一下,谢谢你花时间发布:)HTML::TreeBuilder是我唯一使用的解析器。它可以非常好地处理糟糕的HTML,并且更易于使用,开发速度更快。如果你的任务这么简单的话,解析速度会快很多,但是速度可能并不重要。。。我同意这个观点,我认为它不适合处理糟糕的HTML,这就是为什么它在这方面给我带来问题的原因。。感谢您在这方面的帮助,我现在将进进出出地学习treebuilder:)如果您切换到HTML::treebuilder,请看一看HTML::treebuilder::XPath()语法分析器,treebuilder和treebuilder在幕后使用相同的解析引擎——如果您的语法分析器代码不善于处理糟糕的HTML,那只是您的错。无论如何,解析器的主要用途是当将整个DOM保存在内存中的成本太高时——这很少发生。
Note also that look_down considers "" (empty-string) and undef to be
$h->look_down("alt", "")
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;
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper::Simple;
use Web::Scraper;
$Data::Dumper::Indent = 1;
my $html = '<div id="dataID" style="font-size: 8.5pt; width: 250px; color: rgb(0, 51, 102); margin-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>';
my $proxyscraper = scraper {
process '//div[@id="dataID"]/div', 'proxiesextracted[]' => scraper {
process '//span', 'data1' => 'TEXT';
process '//text()', 'data2' => 'TEXT';
}
};
my $results = $proxyscraper->scrape( $html );
print Dumper($results);
$results = {
'proxiesextracted' => [
{
'data2' => 'test1_a',
'data1' => 'test1'
},
{
'data2' => 'test2_a',
'data1' => 'test2'
},
{
'data2' => 'test3_a',
'data1' => 'test3'
}
]
};