ãæè¿ã®èªæ¸ä½é¨ãæ¯ãè¿ãã¨ã9å²è¿ããKindleã§ã®èªæ¸ã§ããèªã¿ããæ¬ãè²·ã£ã¦ããã¦ã好ããªæã«å¥½ããªæ¬ãèªããã®ã¯é常ã«ãããããã§ããä¸æ¹ã§ããã®ã¹ã¿ã¤ã«ã ã¨ç©èªãå¤ããªãã¾ããèªã¿ãããªã¹ãã¯ç¡æ°ã«ãã£ã¦ç©èªãå¤ãã®ã§ããã°ãè²·ãã¿ã¤ãã³ã°ã¯å®ããªã£ãæã«è²·ã£ã¦ããã®ããã¹ãã§ããããAmazonã§ã¯ãæ§ã ãªKindleã»ã¼ã«ãè¡ããã¾ãããããããã®åç¥æ¹æ³ã¯å åã§ã¯ãªãã®ã§ãã¦ã¼ã¶èªèº«ãã¦ã©ãããã¦ããå¿ è¦ãããã¾ãã人éãããã®ããã«ãã«ããã®ã§ãã¯ãã¼ã©ã¼ã«ãã£ã¦ãããã¾ãããã
å®ç¾æ¹æ³æ¡
ãå®ç¾ããçºã«ã¯ãä¸è¨ã®åæã»æé ãè¸ã¿ã¾ãã
1. ãã¤ãèªã¿ããæ¬ã¯ãã¦ã£ãã·ã¥ãªã¹ãã«å
¥ãã¦ãã
2. ã¦ã£ãã·ã¥ãªã¹ãã¯å
¬éã«ãã¦ãã¦ãèªè¨¼ãªãã§ã¢ã¯ã»ã¹å¯è½ã«ãã¦ãã
3. ã¯ãã¼ã©ã¼ã¯ã¦ã£ãã·ã¥ãªã¹ããåå¾ãã¦ã対象ã®ååä¸è¦§ãåå¾ãã
4. 対象ååã1件ã¥ã¤å·¡åãã¦ãKindleã®ååã§ããã°å¤å¼çããã§ãã¯
5. ä¸å®ã®å¤å¼çã ã¨éç¥
å®è£
ãããã§ã¯ãé çªã«å®è£ æ¹æ³ãèãã¦ããã¾ãããã
ã¦ã£ãã·ã¥ãªã¹ãã®åå¾
ãAmazonã«ãã°ã¤ã³å¾ã«ãhttp://www.amazon.co.jp/gp/registry/wishlist/ã«ã¢ã¯ã»ã¹ãã¦ãã ãããèªåã®ã1ã¤ããããã¯ãè¤æ°ã®ã¦ã£ãã·ã¥ãªã¹ããããã¯ãã§ãã
ãããã¯ãªãã¯ããã¨ãåºæã®IDãã¤ããã¦ã£ãã·ã¥ãªã¹ãã®URLã®ãã¼ã¸ã«é·ç§»ããã¯ãã§ããç§ã®å ´åã¯ã次ã®URLã§ãã
http://www.amazon.co.jp/gp/registry/wishlist/3G4653SB32HMZ/
ã¦ã£ãã·ã¥ãªã¹ãã®å ¬éè¨å®
ããªã¹ãã®å
¬éè¨å®ã¯ãå³ä¸ã®æ¹ã®ããªã¹ãã®è¨å®ãããè¡ãã¾ãããããã¢ãããã該å½ã®ãªã¹ããé¸ãã§ãå
¬éã¨ããã ãã§ããä¸æ¹ã§ããªã¹ããå
¬éã¨ãããã¨ã«ããããªã¹ã¯ãçç¡ã§ã¯ãªãã§ããå
容ãç解ããä¸ã§ãèªå·±è²¬ä»»ã§ãé¡ããã¾ãã
対象ååã®ä¸è¦§ãåå¾ãã
ããã¯ãã¹ã¯ã¬ã¤ãã³ã°ã®ä»æ¹ãå¿ãã¤ã¤ããã¾ããããããªæãã§åãã¾ããclassã®å¤ãa-link-normalãåå¾ããã¨ããã¼ã¸æ¬ä½ã¨ã¬ãã¥ã¼ã®URLãåå¾ã§ãã¾ããæ¬ä½ã®æ¹ã¯ãç¸å¯¾ãã¹ãªã®ã§è£å®ãã¦è¡¨ç¤ºãã¦ãã¾ãã
require 'nokogiri' require 'open-uri' doc = Nokogiri::HTML(open('http://www.amazon.co.jp/gp/registry/wishlist/3G4653SB32HMZ/')) objects = doc.xpath("//a[@class='a-link-normal']") objects.each {|element| url = element[:href] puts "http://www.amazon.co.jp#{url}" if not url.match(/http/) }
ããã¦åé¡ã¯ããªã³ã¯å
ã®ãã¼ã¸ã®ååãKindleãã©ããã§ããAmazonã¯ååãASINã¨ããã³ã¼ãã§ç®¡çãã¦ãã¾ããç´ã®æ¬ã¯ãASIN=ISBNã¨ãªã£ã¦ãã¾ããKindelããã®ä»ã®ååã®å ´åãAmazonãä»çªããã³ã¼ãã«ãªã£ã¦ãã¾ããISBNãã©ããã¯ã³ã¼ãããã§ãã¯ããã°åºæ¥ããã©ãKindleãä»ã®ååãã¯ã³ã¼ãããã¯ãèªã¿åãã¾ãããï¼ä½ç³»ããã®ã§ããã°ãæãã¦ãã ãããï¼
ãã¨ãããã¨ã§ãå¹çæªããã©ä¸åº¦ã¢ã¯ã»ã¹ãã¦åã
ã«ç¢ºèªããæ¹æ³ãã¨ãã¾ãããã®æ¹æ³ã®ã¡ãªããã¨ãã¦ã¯ãç´ã®æ¬ããç¡ãã£ããã®ãKindleåãã¦ããå ´åã®æ¤ç¥ãã§ãã¾ãã
詳細ãã¼ã¸ã®åå¾
ã詳細ãã¼ã¸ã«ã¤ãã¦ã¯ãUserAgentãå½è£ ãã¦ãããªãã¨503ã«ãªãã¾ããï¼ãã¤ããã ã£ãï¼ï¼æ¬æ¥ã§ããã°ãAPIçµç±ã§åããã¨ãæ¨å¥¨ãã¾ãããä»åã¯çç¥ã§ãã対象ãã¼ã¸ã®ã«ãã´ãªã¼ã¯ãIDãnav-subnavã®deta-categoryã®å±æ§ãåç §ããã°åå¾ã§ãã¾ãã
require 'nokogiri' require 'open-uri' UserAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 ' url="http://www.amazon.co.jp/dp/4787710176?_encoding=UTF8&colid=3G4653SB32HMZ&coliid=I168IVRW8TS0E4" url="http://www.amazon.co.jp/ebook/dp/B00VESYKDU/ref=tmm_kin_swatch_0?_encoding=UTF8&coliid=I3I1RV6FI82PJ5&colid=3G4653SB32HMZ&qid=&sr=" doc = Nokogiri::HTML(open(url, 'User-Agent' => UserAgent)) puts doc.xpath("//div[@id='nav-subnav']").attr("data-category")
ãç´ã®æ¸ç±ã®å ´åã¯booksã§ãKindleã®å ´åã¯digital-textã¨ãªãã¾ãã
ç´ã®æ¸ç±ã®å ´åã®å¦ç
ãç´ã®æ¸ç±ã®å ´åã¯ãKindleã®ãªã³ã¯ããããæ¢ãã¦ã¿ã¾ãããããã¾ãè¯ãããæ¹ã§ã¯ãªãã§ãããKindleçãããå ´åã¯å
¨ã¦ã®ãã©ã¼ãããã®ãã¡ã§ä¸çªå·¦ã«è¡¨ç¤ºããã¾ããã¨ãããã¨ã§ãã¨ããããä¸çªå·¦ã®ãã®ãã¨ã£ã¦Kindleã ã£ããå¦ç対象ã¨ããã¨ããæ¹éã«ãã¾ãã
ãã©ã¦ã¶ã§è¦ã¦ãããã®ã¨ãJavaScriptãåããªãOpen-URIã§åå¾ãããã®ã§å¤å°å·®ç°ãããã®ã§æ¸æãããããã¾ããããä¸è¨ã®ãããªæãã§åå¾ã§ãã¾ãã
if doc.xpath("//span[@class='a-button a-spacing-mini a-button-toggle format']/span/a/span").first.text == "Kindleç" puts "http://www.amazon.co.jp#{doc.xpath("//span[@class='a-button a-spacing-mini a-button-toggle format']/span/a").first[:href]}" end
â»ããããé¢åèãã£ã¦ãã®ã§ãããµã«ãªé£ãã§ãããã§ããã
å¤å¼ãæ å ±ã®åå¾
ãKindleã®å¤å¼ãã¯ã2種é¡ããã¾ãããã¤ã³ãéå ã¨ç´ç²ãªå¤å¼ãã§ããä»åã¯ãå¤å¼ãã対象ã¨ãã¾ããå¤å¼ãæ å ±ã¯ãsavingsRowã¯ã©ã¹ã®ä¸ã«æ ¼ç´ããã¦ãã¾ãããã¾ã綺éºãªå½¢ã§åã¾ã£ã¦ããªãã®ã§ãæ£è¦è¡¨ç¾çãä½µç¨ãã¾ãã
off_info = doc.xpath("//tr[@class='savingsRow']/td[2]").text
éç¥
ãä»»æã®ãããå¤ä»¥ä¸ã®å¤å¼çã ã¨ã¡ã¼ã«ã§éãã¨è¨ã£ãæãã®å®è£ ãããã°ããã§ããã¡ã¼ã«ãéãã ãã§ããã°ãAWSã®SESã¨ãããå§ãã§ãã
ææ³
ãæ§é åãã¦ããªã®ã§é¢åãããã§ããã¦ã£ãã·ã¥ãªã¹ãã ãã¹ã¯ã¬ãã³ã°ãã¦ãå¾ã¯Product Advertising APIã使ãæ¹ã絶対楽ã§ããRubyã§ã¹ã¯ã¬ãã³ã°ããã®ã§ããã°ãRubyによるクローラー開発技法ã¨ããæ¬ãããã¾ãã

Rubyã«ããã¯ãã¼ã©ã¼éçºææ³ ãå·¡åã»è§£ææ©è½ã®å®è£ ã¨21ã®éç¨ä¾
- ä½è : ä½ã æ¨æé
- åºç社/ã¡ã¼ã«ã¼: SBã¯ãªã¨ã¤ãã£ã
- çºå£²æ¥: 2015/03/02
- ã¡ãã£ã¢: Kindleç
- ãã®ååãå«ãããã° (1件) ãè¦ã
See Also:
プログラマになりたい Advent Calendar 2015 - Qiita
プログラマになりたい Advent Calendar 2015 - Adventar
http://qiita.com/advent-calendar/2015/crawler