HACK#48 การ scrape Google Catalogs

Scrape และ บันทึกผลของการสืบค้น Google Catalogs ให้อยู่ในรูปของไฟล์ comma-delimited
ถึง แม้คริสต์มาสจะมีแค่ปีละครั้ง แต่แค็ตตาล็อกสำหรับการชอบปิ้งนั้นมีให้สนุกได้ตลอดปี และ สำหรับ Google Catalogs เองนั้น ก็ทำอะไรๆให้มันง่ายกว่าที่เคย
การ ที่คุณใช้เวลาในบ่ายวันหนึ่งของฤดูหนาว เพื่อที่จะหาผ้าคลุมไหล่ให้คุณป้าของคุณ ก็ไม่ได้หมายความว่า คุณจะค้นหาซ้ำอีกครั้งเพื่อให้ได้ผลลัพธ์เหมือนครั้งก่อนที่ได้เห็นสินค้า ที่น่าสนใจได้
เพราะ ว่า Google API นั้นไม่สนับสนุนการสืบค้น Google Catalogs ดังนั้นการแฮกข้อนี้จึงต้องดึงผลจากการสืบค้น Google Catalogs มาจากโค้ด HTML แทน โดยการแฮกนี้จะเก็บข้อมูลต่างๆดังนี้ คือ หัวเรื่องของแค็ตตาล็อก, วันที่เรียกดู, หน้าที่เท่าใด, และลิงก์ที่เชื่อมโยงไปยังรูปภาพ โดยผลของการแฮกจะอยู่ในรูปของไฟล์ CSV ซึ่งพร้อมสำหรับการนำเข้าไปยังฐานข้อมูล หรือโปรแกรม spreadsheet .ในภายหลัง
เนื่อง จาก Terms of Service ของ Google นั้น ห้ามการเข้าถึง Google โดยอัตโนมัติ เว้นแต่จะผ่านทาง Google API ดังนั้นการแฮกนี้จะไม่ได้เชื่อมต่อกับ Google โดยตรง แต่ทำงานกับหน้าเว็บที่เป็นผลของการสืบค้นจาก Google Catalogs ที่เราค้นมาเอง แล้วเซฟเก็บเอาไว้ก่อนแล้วด้วยคำสั่ง File -> Save As ของเบราเซอร์
ดังเช่นการแฮก Google News (Hack #47) คุณอาจปรับแต่งการแฮกให้ได้ผลลัพธ์ที่มีลำดับ หรือมีข้อมูลตามต้องการได้ และด้วยการเติม &num=100 ต่อท้าย URL ในการสืบค้น คุณก็จะได้ผลลัพธ์จำนวน 100 รายการ แทนที่จะได้เพียงรายการแรกรายการเดียว
โค้ดตัวอย่าง
#!/usr/bin/perl
# catalogs2csv.pl
# Google Catalogs Results exported to CSV suitable for import into Excel
# Usage: perl catalogs2csv.pl < catalogs.html > catalogs.csv
print qq{"title","link","date","page"\n};
my($results) = join '', <>;
while ( $results =~ m!(.+?) (.+?) - Pa
ge (\w+?) -.+? !migs ) {
my($title, $date, $page, $url) = ($1||'',$2||'',$3||'',$4||'');
$title =~ s!"!""!g; # double escape " marks
my $output = qq{"$title","$url","$date","$page"\n};
$output =~ s! ! !g; # clean spaces
print $output;
}
การใช้งานสคริปต์
รัน สคริปต์ที่ command line โดยระบุไฟล์ HTML ที่บันทึกผลของการสืบค้น Google Catalogs ไว้ และระบุชื่อไฟล์ชนิด CSV ที่คุณต้องการสร้างขึ้นมา หรือไฟล์ที่คุณต้องการเพิ่มข้อมูลเข้าไปต่อท้าย (append) ข้อมูลที่มีอยุ่เดิม เช่น ในที่นี้ให้อินพุตมาจากไฟล์ catalogs.html และ เอาต์พุตเป็น catalogs.csv
$ perl catalogs2csv.pl <> catalogs.csv
หากตัดเครื่องหมาย > และไฟล์ catalogs.csv ออก ผลลัพธ์ก็จะแสดงที่หน้าจอแทน
ผลลัพธ์ของการแฮก
ดูเหมือนว่าคุณและคุณป้าจะโชคดี เพราะมีผ้าคลุมไหล่ชั้นเยี่ยมหลายชิ้นให้เลือกใน Google Catalogs
"title","link","date","page"
"Isabella","http://catalogs.google.com/catalogs?num=100
&hl=en&amp;amp;amp;lr=&ie=UTF-8&issue=13655&catpage=cover","Fall 2002","3"
"Sovietski Collection","http://catalogs.google.com/catalogs?num=100
&hl=en&amp;amp;amp;lr=&ie=UTF-8&issue=9447&catpage=cover","Summer 2002","37"
"Rego","http://catalogs.google.com/catalogs?num=100&hl=en
&lr=&ie=UTF-8&issue=12484&catpage=cover","2002","21"
"Crazy Crow Trading Post","http://catalogs.google.com/catalogs?num=100
&hl=en&amp;amp;amp;lr=&ie=UTF-8&issue=12346&catpage=cover","2002","39"
"Winter Silks - Sale","http://catalogs.google.com/catalogs?num=100
&hl=en&amp;amp;amp;lr=&ie=UTF-8&issue=10002&catpage=cover","Summer 2002","11"
...
"Previews","http://catalogs.google.com/catalogs?num=100
&hl=en&amp;amp;amp;lr=&ie=UTF-8&issue=14468&catpage=cover","Oct 2002","381"
(ในแต่ละรายการจะแสดงในบรรทัดของตัวเอง แต่ในที่นี้ในแต่ละรายการต้องมีการขึ้นบรรทัดใหม่ เพื่อความสะดวกในการตีพิมพ์)
Hacking the Hack
รูปแบบของผลลัพธ์ที่ได้ อาจปรับเปลี่ยนตามที่คุณพอใจ โดยดูรายละเอียดเพิ่มเติมได้ที่ Hack # 47

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

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

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

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