לטייל ברשת עם רובי

מכירים בפייסבוק שכאשר אתם מזינים קישור כלשהו יש תמונה (שאפשר לבחור ממאגר) מתוך דף ה html שאליו שמתם קישור (ראו את התמונה בצד ימין) ?

אם הייתם רוצים לדעת איך לקבל את כל התמונות האלו, אז זה הפוסט בשבילכם.

ברובי יש כמה כלים לעשות את זה, אבל אני אשתמש בכלי אחד שהוא מאוד מהיר ופשוט לעבודה אשר נקרא nokogiri. הכלי משתמש ב libxml2 ופירוש השם הוא "להב" ביפנית (עד כמה שאני מבין לפחות). nokogiri הוא מפרש אשר יודע לעבוד עם מספר קבצים שאותם הוא יודע לפרש כמו html, xml, css ו XSLT.

#!/usr/bin/env ruby

require 'rubygems'
require 'nokogiri'
require 'open-uri' # allow us to open a uri using the open command

html = Nokogiri::ׁHTML(open('https://idkn.wordpress.com'))
html.css('img').each do |img|
  puts img.attribute('src').value
end

הקוד כאן מאוד פשוט. אנחנו טוענים את nokogiri וטוענים ספרייה אחריה שמאפשרת לנו לפתוח URI שונים במקום רק קובץ מקומי.

בשורה הבאה אנחנו מאתחלים את המשתנה html כמחלקה של nokogiri. במקרה הזה עם התוכן של הדף הראשי של הבלוג הזה.

לאחר מכן, אנחנו משתמשים ב css selectors בשביל למצוא את האלמנט של img, ורצים על כל האלמנטים אשר מתקבלים חזרה, כאשר כל אלמנט כזה יתגלם במשתנה img בתורו בלולאה.

לאחר מכן,  בתוך הלולאה אנחנו קוראים את הערך של ה attribture של src ומדפיסים את התוכן שלו.

מאוד קריא, פשוט ומהיר לקבל את כל אלמנטים של התמונות. במידה ונחפש עוד אלמנטים, נגיד flash אפשר גם באמצעות הפונקציה של css לקבל אותם, באותה צורה בה היינו עובדים עם selectors של css.

אם היינו רוצים לעבוד עם קובץ XML במקום (חשוב להבין ש nokogiri יודע להבדיל בניהם גם אם מאתחלים את ה html שלנו כ XML), אז נוכל לעבוד עם xpath במקום (דבר שאי אפשר לעשות עם HTML).

חשוב לדעת שבמידה ורוצים לעבוד עם סביבה אשר דורשת מאיתנו אינטראקציה, nokogiri לא הכלי המתאים, אבל יש כלים אחרים ברובי שיודעים לבצע את זה.

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s