วันพฤหัสบดีที่ ๒๖ กรกฎาคม พ.ศ. ๒๕๕๐

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!<div>(.*?)</div>!mis;

while ( $results =~
m!<p><a href="?(.+?)"?>(.+?)</a>.+?\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 ออกมาไว้ต่างหาก

0 ความคิดเห็น: