perlのHTML::TagsetをちょっとだけHTML5化

スポンサーリンク
スポンサーリンク

概要

webスクレイピングしてますか?
色々なサイトをPlaggerで取得しようとしていたらxpathがマッチしないサイトがありました。
そこではどうも使っているTagの中にsectionという物を利用しているようでした。
今使っているHTML::Tagsetではsectionを認識してくれません。でwebを漁っているとどうやらここで紹介されているパッチを当てれば使えるようになるという情報を見つけました。
ただパッチを当てようとするとどうもバージョン違いのようで行が合いません。
そこで内容を一つづつ変更してパッチを作り直しました。

HTML5化仮パッチ

HTML::Tagsetのソースを探して下さい。Tagset.pmという名前で登録されているはずです。ちなみにバージョンはcpanサイトに登録されている最新の@3.2.0です。
そこに次のtagset.patchという名前でファイルを作成してください。

--- Tagset.pm.org	2021-07-06 00:04:07.835480459 +0900
+++ Tagset.pm	2021-07-06 00:38:26.494848477 +0900
@@ -95,6 +95,7 @@
  'a'       => ['href'],
  'applet'  => ['archive', 'codebase', 'code'],
  'area'    => ['href'],
+ 'audio'   => ['src'],
  'base'    => ['href'],
  'bgsound' => ['src'],
  'blockquote' => ['cite'],
@@ -115,10 +116,13 @@
  'object'  => ['classid', 'codebase', 'data', 'archive', 'usemap'],
  'q'       => ['cite'],
  'script'  => ['src', 'for'],
+ 'source'  => ['src'],
  'table'   => ['background'],
  'td'      => ['background'],
  'th'      => ['background'],
  'tr'      => ['background'],
+ 'track'   => ['src'],
+ 'video'   => ['poster'],
  'xmp'     => ['href'],
 );
 
@@ -185,6 +189,7 @@
   wbr nobr blink
   font basefont bdo
   spacer embed noembed
+  time mark ruby rp rt bdi bdo
 );  # had: center, hr, table
 
 
@@ -253,7 +258,7 @@
 =cut
 
 %isFormElement  = map {; $_ => 1 }
- qw(input select option optgroup textarea button label);
+ qw(input select option optgroup textarea button label keygen output progress meter );
 
 =head2 hashset %HTML::Tagset::isBodyMarkup
 
@@ -285,6 +290,10 @@
   table
   center
   form
+ 
+  section nav article aside hgroup figure
+  param video audio source track canvas
+  details summary command menu
  ),
  keys %isFormElement,
  keys %isPhraseMarkup,   # And everything phrasal
@@ -313,7 +322,7 @@
 %isKnown = (%isHeadElement, %isBodyElement,
   map{; $_=>1 }
    qw( head body html
-       frame frameset noframes
+       frame frameset noframes figcaption
        ~comment ~pi ~directive ~literal
 ));
  # that should be all known tags ever ever

そして元ファイルを取っておくためコピーしときます。

# cp Tagset.pm Tagset.pm.org

その後

# patch -u Tagset.pm < tagset.patch

でパッチを当てます。

パッチ後の動作確認

色々なサイトでHTML5で書かれている所があると思います。私は引っかかったのがsectionタグでしたのでチェックしてみました。
無事マッチしてくれるようになりましたので問題無さそうです。
他にもこのパッチで追加されているのでいい感じに処理できると思います。

コメント

タイトルとURLをコピーしました