พยายามจะเขียนโปรแกรมไปแกะเว็บด้วย Perl

ลูกทุ่งมากอะนะ ไม่มีหลักการอะไรเลย แทบจะดึง tag a ออกมาทั้งหมดแล้วก็มาดู attribute ว่า link ไปหน้าที่ต้องการหรือเปล่า

หลักๆ แล้วใช้ HTML::TreeBuilder

คำสั่งที่สำคัญเลยคือ look_down เราใส่เงื่อนไขไปได้ว่าใช้ element ที่มีเงื่อนไขแบบที่เราต้องการหรือเปล่า มันจะ traverse tree ไปเรื่อยๆ

แต่เท่านี้ก็เหมือนยังไม่พอจะทำ RSS Feed เพราะมันยังดึงวันที่มาไม่ได้

ถ้าจะทำให้ generic ขึ้นอาจจะดู prefix ของ link แทน อยากลอง แต่ต้องอดใจไว้ก่อน

use strict;
use HTML::TreeBuilder;
use Data::Dumper;

my $filename = "news.htm";
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($filename);
my @elements = $tree->look_down(
	sub {
		if(lc($_[0]->tag()) eq "a" && $_[0]->attr('onclick') ne undef) {
			my $onclick = $_[0]->attr("onclick");
			if($onclick =~ /^NewWindow\('publicshow/) {
				return 1;
			}
		}
		return 0;
	}
);
foreach my $element(@elements) {
	if($element->attr('onclick') =~ /^NewWindow\('(publicshow[^']+)/) {
		my $url = $1;
		my $topic = "";
		foreach my $c ($element->content_list) {
			if(ref($c) ne "HTML::Element") {
				if(!($c =~ /^\s*$/)) {
					$topic = $topic . $c;
				}
			}
		}
		$topic =~ s/[\n\r]/ /m;
		if($topic ne "") {
			print "$topic\n$url\n\n";
		}
	}
}

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s