Snippets

sironekotoro connpassのページ下部にあるフィード欄の情報を取得する

Updated by sironekotoro

File connpass_getfeed.pl Modified

  • Ignore whitespace
  • Hide word diff
 #  <div class="group_box" id="feed">
 # のタグで囲まれた範囲の
 #  thumb36_list
-# というclass属性を持つdivをscrapeする。返り値は配列リファレンス
+# というclass属性を持つdiv。
+# これをscrapeする。
+#
+# コメントしている複数のユーザの情報を取得したいので、
+# 返り値は配列リファレンス
 
 my $scraper = scraper {
     process '//div[@id="feed"]//div[contains( @class , "thumb36_list" )] ',
     }
 };
 
+# スクレイピングを実行する
 my $res = $scraper->scrape($url);
 
+# スクレイピングした結果の配列リファレンスを表示する
 for my $feed ( @{ $res->{feeds} } ) {
     say '-' x 10;
     say encode_utf8( $feed->{time} );
Updated by sironekotoro

File connpass_getfeed.pl Modified

  • Ignore whitespace
  • Hide word diff
 use warnings;
 use feature qw/say/;
 use Data::Dumper;
-use Encode;
-
-use URI;
-use LWP::Simple qw/get/;
-use Web::Scraper;
+use Encode qw/encode_utf8/;
+use URI qw/new/;
+use Web::Scraper qw/scraper/;
 
+# connpassのフィード欄を取得したい
 my $url = URI->new('https://perl-entrance-tokyo.connpass.com/event/89771/');
 
-my $html = get($url);
+# 取得したいフィード欄(ページ下部)は
+# xpathで
+#  <div class="group_box" id="feed">
+# のタグで囲まれた範囲の
+#  thumb36_list
+# というclass属性を持つdivをscrapeする。返り値は配列リファレンス
 
 my $scraper = scraper {
-    process '//p[@class="message"]',         'title[]'   => 'TEXT';
-    process '//span[@class="icon_comment"]', 'comment[]' => 'TEXT';
+    process '//div[@id="feed"]//div[contains( @class , "thumb36_list" )] ',
+
+        'feeds[]' => scraper {    # 上記xpath内をさらにscrapeする
+
+            # class 属性が date の pタグのTEXT部を取得する
+            process '//p[@class="date"]',
+            'time' => 'TEXT',
+            # class 属性が message の pタグの中にあり、
+            # 最初に出現するaタグのTEXT部を取得する
+            process '//p[@class="message"]/a[1]',
+            'user' => 'TEXT',
+            # class 属性が message の pタグのTEXT部を取得する
+            process '//p[@class="message"]',
+            'action' => 'TEXT',
+            # class 属性が icon_comment の spanタグのTEXT部を取得する
+            process '//span[@class="icon_comment"]',
+            'comment' => 'TEXT',
+    }
 };
 
-my $res = $scraper->scrape($html);
-
-my $number = scalar @{ $res->{title} };
+my $res = $scraper->scrape($url);
 
-for my $index ( 0 .. $number - 1 ) {
-    print encode_utf8 ( $res->{title}->[$index] ),   "\n";
-    print encode_utf8 ( $res->{comment}->[$index] ), "\n";
-    print '-' x 10, "\n";
+for my $feed ( @{ $res->{feeds} } ) {
+    say '-' x 10;
+    say encode_utf8( $feed->{time} );
+    say encode_utf8( $feed->{user} );
+    say encode_utf8( $feed->{action} );
+    say encode_utf8( $feed->{comment} ) // ''; #コメントが空の場合がありうる
 }
 
Created by sironekotoro

File connpass_getfeed.pl Added

  • Ignore whitespace
  • Hide word diff
+use strict;
+use warnings;
+use feature qw/say/;
+use Data::Dumper;
+use Encode;
+
+use URI;
+use LWP::Simple qw/get/;
+use Web::Scraper;
+
+my $url = URI->new('https://perl-entrance-tokyo.connpass.com/event/89771/');
+
+my $html = get($url);
+
+my $scraper = scraper {
+    process '//p[@class="message"]',         'title[]'   => 'TEXT';
+    process '//span[@class="icon_comment"]', 'comment[]' => 'TEXT';
+};
+
+my $res = $scraper->scrape($html);
+
+my $number = scalar @{ $res->{title} };
+
+for my $index ( 0 .. $number - 1 ) {
+    print encode_utf8 ( $res->{title}->[$index] ),   "\n";
+    print encode_utf8 ( $res->{comment}->[$index] ), "\n";
+    print '-' x 10, "\n";
+}
+
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.