4

私はこれで立ち往生していて、一日中..私はまだperlでの解析/スクレイピングにかなり慣れていませんが、これまではダウンしていると思っていました..さまざまなperlモジュール(tokeparser、tokeparser:シンプル、Webパーサーなど)...次の文字列があります(実際にはHTMLページ全体ですが、これは関連する部分を示しているだけです..「text1」と「text1_a」を抽出しようとしています.など(「text1」などは例としてそこに入れられているだけです)...基本的には、それぞれから最初にこれを抽出する必要があると思います:

"<span style="float: left;">test1</span>test1_a"

次に、これを解析して2つの値を取得します。 tokeparser:simple で実行できると思っていたので、これがなぜそんなに問題を引き起こしているのかわかりませんが、DIV内の値を返すことができなかったようです、別のタグのセット(タグ)が含まれているためだろうか

文字列 (html Web ページを表す)

<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>

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';

私は盲目的に web:parser モジュールの意味を理解しようとしているだけです。本質的にドキュメントがないため、モジュールに含まれている例とインターネットで見つけた例からそれをつなぎ合わせただけです..アドバイス大変感謝しています。

4

2 に答える 2

5

DOM パーサーが必要な場合 (ツリー ブラウジングは使いやすく、少し遅くなります)。HTML::TreeBuilder を試す

HTML::Elementの man ページ (モジュールが含まれています)

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;
于 2010-07-15T03:46:54.057 に答える
1

Web :: Scraperを使用して、試してみてください:

#!/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'
    }
  ]
};

お役に立てれば

于 2010-07-15T15:46:47.020 に答える