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 ออกมาไว้ต่างหาก

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

I miss you all กับ I miss all of you ต่างกันอย่างไร

ปัญหาและเฉลยวิชาธรรม นักธรรมชั้นตรี สอบในสนามหลวง วันอังคาร ที่ ๒๙ กันยายน พ.ศ.๒๕๕๒

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