HTML :: TableExtract: применение правильных атрибутов для указания интересующих атрибутов - PullRequest
0 голосов
/ 22 октября 2010

Я попытался запустить следующий скрипт Perl на HTML ниже. Моя проблема заключается в том, как определить правильную ссылку на хеш с attribs, которая задает интересующие атрибуты внутри самого моего тега HTML <table>.

#!/usr/bin/perl

use strict; use warnings;
use HTML::TableExtract;
use YAML;


my $table = HTML::TableExtract->new(keep_html=>0, depth => 1, count => 1, br_translate => 0 ); 

$table->parse($html);
foreach my $row ($table->rows) 

sub cleanup {
    for ( @_ ) {
        s/\s+//;
        s/[\xa0 ]+\z//;
        s/\s+/ /g;
    }
}

{ print join("\t", @$row), "\n"; }

Я хочу применить этот код к HTML-документу, который вы увидите ниже.

Мой первый подход - сделать это методом columns. Но я не могу понять, как использовать метод столбцов в следующем HTML-файле: Моя интуиция заставляет меня думать, что это должно быть что-то вроде следующего (но моя интуиция ошибочна):

foreach my $column ($table->columns) { 
    print join("\t", @$column), "\n"; 
}

Документация HTML :: TableExtract не проливает много света (для меня в любом случае).

Я могу видеть в коде модуля, что метод столбцов принадлежит HTML::TableExtract::Table, но я не могу понять, как его использовать. Я ценю любую помощь.

Справочная информация:

Я пытаюсь извлечь таблицу, и у меня есть очень маленький документ с таблицами, который я хочу проанализировать с помощью модуля HTML::TableExtract. Я пытаюсь найти ключевые слова в HTML - чтобы я мог взять их для attribs Мне нужно распечатать только необходимые данные.

Я пытался перейти на CPAN, но не смог найти, как искать его по определенным ключевым словам. Один из способов сделать это - HTML::TableExtract, другой способ - разобрать с HTML::TokeParser У меня очень мало опыта с HTML::TokeParser.

Ну, - так или иначе, мне нужно сделать этот анализ: я хочу вывести результат проанализированных таблиц в некоторый .text - или даже лучше сохранить его в базе данных. Проблема здесь заключается в том, что я не могу найти способ поиска в полученной проанализированной таблице и получения необходимых данных.

HTML

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">

<link rel="stylesheet" href="jspsrc/css/bp_style.css" type="text/css">

<title>Weitere Schulinformationen</title>
</head>

<body class="bodyclass">
<div style="text-align:center;"><center>
<!-- <fieldset><legend> general information  </legend>
-->
<br/>

<table border="1" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="80%" class='bp_result_tab_info'>
<!-- <table border="0" cellspacing="0" bordercolordark="white" bordercolorlight="black" width="80%" class='bp_search_info'>
-->  
  <tr>
    <td width="100%" colspan="2" class="ldstabTitel"><strong>data_one </strong></td>
  </tr>
  <tr>
    <td width="27%"><strong>data_two</strong></td>
    <td width="73%">&nbsp;116439
  </td>
  </tr>
  <tr>
    <td width="27%"><strong>official_description</strong></td>
    <td width="73%">the name </td>
  </tr>
  <tr>
    <td width="27%"><strong>name of the street</strong></td>
    <td width="73%">champs elysee</td>
  </tr>
  <tr>
    <td width="27%"><strong>number and town</strong></td>
    <td width="73%"> 75000 paris </td>
  </tr>
  <tr>
    <td width="27%"><strong>telefon</strong></td>

    <td width="73%">&nbsp;000241 49321
</td>
  </tr>
  <tr>
    <td width="27%"><strong>fax</strong></td>
    <td width="73%">&nbsp;000241 4093287
</td>
  </tr>
  <tr>
  <td width="27%"><strong>e-mail-adresse</strong></td>
  <td width="73%">&nbsp;<a href=mailto:1111116439@my_domain.org>1222216439@site.org</a>
</td>
  </tr>
  <tr>
    <td width="27%"><strong>internet-site</strong></td>
    <td width="73%">&nbsp;<a href=http://www.thesite.org>http://www.thesite.org</td>
 </tr>
<!--  
<tr>
    <td width="27%">&nbsp;</td>
    <td width="73%" align="right"><a href="schule_aeinfo.php?SNR=<? print $SCHULNR ?>" target="_blank">
    [Schuldaten &auml;ndern]&nbsp;&nbsp;</a>
</tr>
</td> -->
<tr>
  <td width="27%">&nbsp;</td>
  <td width="73%">the department</td>
 </tr> 

  <tr>
    <td width="100%" colspan=2><strong>&nbsp;</strong></td>
 </tr> 
 <tr>
    <td width="27%"><strong>number of indidviduals</strong></td>
    <td width="73%">&nbsp;192</td>
<tr>
    <td width="100%" colspan=2><strong>&nbsp;</strong></td>
   </tr>
  <!-- if (!fsp.isEmpty()){
 ztext = "&nbsp;";

 int i = 0;
 Iterator it = fsp.iterator();
 while (it.hasNext()){
  String[] zwert = new String[2];
  zwert = (String[])it.next();

  if (i==0){
   if (zwert[1].equals("0")){
    ztext = ztext+zwert[0];
   }else{
    ztext = ztext+zwert[0]+" mit "+zwert[1];
    if (zwert[1].equals("1")){
     ztext = ztext+" Sch&uuml;ler";
    }else{
     ztext = ztext+" Sch&uuml;lern";
    }
   } 
   i++;
  }else{
   if (zwert[1].equals("0")){
    ztext = ztext+"<br>&nbsp;"+zwert[0];
   }else{
    ztext = ztext+"<br>&nbsp;"+zwert[0]+" mit "+zwert[1];
    if (zwert[1].equals("1")){
     ztext = ztext+" Sch&uuml;ler";
    }else{
     ztext = ztext+" Sch&uuml;lern";
    }
   } 
  }  
 } 

-->





</table>
<!--  </fieldset>  -->
<br>

</body>
</html>

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 22 октября 2010

Вам необходимо предоставить что-то, что однозначно идентифицирует данную таблицу.Это может быть содержимое его заголовков или атрибутов HTML.В этом случае в документе только одна таблица, поэтому вам даже не нужно этого делать.Но если бы я предоставил конструктору что-нибудь, я бы предоставил класс таблицы.

Кроме того, я не думаю, что вам нужны столбцы таблицы.Первый столбец этой таблицы состоит из меток, а второй столбец состоит из значений.Чтобы получить метки и значения одновременно, необходимо обрабатывать таблицу построчно.

#!/usr/bin/perl

use strict; use warnings;
use HTML::TableExtract;
use YAML;

my $te = HTML::TableExtract->new(
    attribs => { class => 'bp_result_tab_info' },
);

$te->parse_file('t.html');

for my $table ( $te->tables ) {
    print Dump $table->columns;
}

Вывод:

---
- 'data_one '
- data_two
- official_description
- name of the street
- number and town
- telefon
- fax
- e-mail-adresse
- internet-site
- á
- á
- number of indidviduals
- á
---
- ~
- "á116439\r\n  "
- 'the name '
- champs elysee
- ' 75000 paris '
- "á000241 49321\r\n"
- "á000241 4093287\r\n"
- "á1222216439@site.org\r\n"
- áhttp://www.thesite.org
- the department
- ~
- á192
- ~

Наконец, совет:Понятно, что вы не очень понимаете Perl (или HTML в этом отношении).Для вас было бы лучше сначала попытаться изучить некоторые основы.Таким образом, все, что вы делаете, это неправильно копируете и вставляете код из одного ответа в другой и ничего не изучаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...