HACK#44 การ scrape ผลลัพธ์การสืบค้นของ Google

ทำให้ผลลัพธ์ของ Google อยู่ในรูปของไฟล์ comma-delimited
ใน เมื่อคุณสามารถใช้ Google API ในการหาผลลัพธ์การสืบค้น และเก็บไว้ในรูปใดก็ได้ตามใจชอบ แล้วเหตุใดคุณจึงคิดที่จะทำงานทีละขั้นโดยการสืบค้นด้วย Google บันทึกผลลัพธ์แล้ว scrape ด้วยโปรแกรม Perl อยู่อีก แต่เรื่องของเรื่องก็คือคุณอาจจะทำไม่ได้ หรือไม่อยากจะทำอะไรอย่างที่ Google API ทำได้ เพราะคุณอาจเพียงแค่อยากได้ผลการสืบค้น แล้วก็วางลงในไฟล์ spreadsheet แล้วก็ทำอย่างอื่นต่อไป
นั่น คือสิ่งที่เราทำใน Hack #49 โดยที่คุณสามารถบันทึกผลของการสืบค้นลงในไฟล์ แล้วก็ผ่านกระบวนการทำให้อยู่ในรูปไฟล์ text และ comma-delimited ด้วยสคริปต์ภาษา Perl แบบง่ายๆ
Tip: อย่าลืมที่จะตั้งค่า preferences (Hack #1) ให้แสดงผลลัพธ์ได้ 100 รายการต่อหน้า เพื่อที่จะได้ประโยชน์สูงสุดจากแฮกในหัวข้อนี้
โค้ดตัวอย่าง

#!/usr/bin/perl
# google2csv.pl # Google Web Search Results exported to CSV suitable
# for import into Excel
# Usage: perl google2csv.pl < results.html > results.csv

print qq{"title","url","size","domain suffix"\n};

my($results) = (join '', <>) =~
m!
(.*?)
!mis;

while ( $results =~
m!(.+?).+?\s+-\s+(\d+k)?!mgis
) {
my($url,$title, $size) = ($1||'',$2||'',$3||'');
my($suffix) = $url =~ m!\.(\w+)/!;
$title =~ s!"!""!g; # double escape " marks
$title =~ s!<.+?>!!g; # drop all HTML tags print
qq{"$title","$url","$size","$suffix"\n};
}


การใช้งานสคริปต์
รันสคริปต์ที่ command line โดย ระบุชื่อไฟล์ HTML และชื่อไฟล์ CSV ที่ต้องการสร้าง หรือไฟล์ที่คุณต้องการเพิ่มผลลัพธ์เข้าไปต่อท้าย (append) ตัวอย่างเช่น การใช้ไฟล์ results.html เป็นอินพุต และ results.csv เป็นเอาท์พุต ให้ทำดังนี้
$ perl google2csv.pl <> results.csv
แต่ถ้าหากคุณไม่ระบุ > และ results.csv แล้ว ผลลัพธ์จะแสดงที่หน้าจอแทน
$ perl google2csv.pl <>
ผลลัพธ์
ข้างล่างเป็นผลของการใช้งานสคริปต์ โดยเป็นผลลัพธ์จากการสืบค้นว่า “Mac OS X”
$ perl google2csv.pl <>
"title","url","size","domain suffix"
"Apple - Mac OS X","http://www.apple.com/macosx/","","com"
"Apple - Software - Mac OS X Server","http://www.apple.com/server/",
"29k","com"
"Mac OS X Development","http://developer.apple.com/macosx/","28k","com"
"Mac OS X Hints - Get the most from X!","http://www.macosxhints.com/",
"","com"
"Mac OS X Apps - The Source For Mac OS X Software",
"http://www.macosxapps.com/","39k","com"
"VersionTracker.com - free Macintosh software downloads for Mac
OS ... ","http://www.versiontracker.com/macosx/","101k","com"
"O'Reilly Mac OS X Conference",
"http://conferences.oreillynet.com/macosx2002/","25k","com"
"MacNN | OS X","http://osx.macnn.com/","94k","com"
"???? - Mac OS X","http://www.apple.co.jp/macosx/","43k","jp"
"Apple - Support - Mac OS X",
"http://www.info.apple.com/usen/macosx/","36k","com"
คุณจะเห็นว่าโปรแกรมเก็บข้อมูลสี่อย่างลงในไฟล์ CSV อันได้แก่ Title, URL, Size (ถ้ามี) และ ชนิดของโดเมน แต่ส่วนของ snippet (ข้อความที่อธิบายเนื้อหาคร่าวๆของหน้าเว็บเพจ) ซึ่งปกติจะแสดงรวมอยู่ด้วยในผลของการสืบค้นของ Google นั้นถูกตัดออกไป เพราะว่ามันยากที่จะอ่านได้เมื่ออยู่ใน spreadsheet
คุณ อาจสงสัยนิดหน่อยว่า ทำไมจึงต้องรวมขนาดของเว็บเพจและประเภทของโดเมนเข้ามาด้วย เหตุผลก็คือ เพื่อการศึกษาวิจัย เป็นต้นว่า คุณต้องการผลลัพธ์ที่คุณจะอ้างอิงได้ภายหลังนั้น มันง่ายที่จะจำแนกเป็นกลุ่มตามประเภทของโดเมน เพราะว่า ผลลัพธ์ที่ได้จากโดเมนประเภท .edu นั้นก็มักจะต่างจากประเภท .org และก็มักจะต่างจากประเภท .com นั่นเอง ไม่ต้องพูดถึงข้อแตกต่างจากผลลัพธ์ที่แยกกลุ่มตามประเทศ เช่น .uk กับ .jp เป็นต้น และถ้าหากว่าคุณต้องการสร้างลิงก์เพื่อการเข้าถึงในภายหลัง ก็จะสะดวกกว่าหากสามารถแยกกลุ่มที่ไม่ใช่เพื่อการพาณิชย์ เช่น .edu หรือ .org ออกมาไว้ต่างหาก

โพสต์ยอดนิยมจากบล็อกนี้

ปัญหาและเฉลยธรรม นักธรรมชั้นโท สอบในสนามหลวง พ.ศ. ๒๕๔๓ วันพฤหัสบดี ที่ ๑๖ พฤศจิกายน พ.ศ. ๒๕๔๓

ปัญหาและเฉลยวินัยบัญญัติ นักธรรมชั้นเอก สอบในสนามหลวง พ.ศ. ๒๕๔๓ วันเสาร์ ที่ ๑๘ พฤศจิกายน พ.ศ. ๒๕๔๓

ปัญหาและเฉลยวิชาธรรม นักธรรมชั้นโท สอบในสนามหลวง วันเสาร์ ที่ ๑๙ พฤศจิกายน พ.ศ. ๒๕๔๘