Створення "Web-павуків" в Linux

  1. Web-павук (Web-spider) як програмний агент
  2. біологічні аналогії
  3. Області застосування spider- і scraper-агентів
  4. Web-краулери пошукової машини
  5. Корпоративні Web-краулери
  6. Спеціалізовані Web-краулери
  7. Web-краулери для аналізу електронної пошти
  8. Приклад 1. Простий агент типу scraper
  9. Лістинг 1. Сценарій на мові Ruby для простого аналізу метаданих (srvinfo.rb)
  10. Лістинг 2. Приклад використання агента для визначення типу Web-сервера
  11. Приклад 2. Агент типу scraper для знаходження біржових котирувань
  12. Лістинг 3. Простий Web-агент для знаходження біржових котирувань
  13. Лістинг 4. Приклад використання Web-агента для знаходження біржових котирувань
  14. Лістинг 5. Web-агент для знаходження біржових котирувань з можливістю відсилання повідомлень по електронній...
  15. Лістинг 6. Демонстрація роботи монітора акцій
  16. Мал. 1. Повідомлення, яке послав по електронній пошті Ruby-сценарій з лістингу 5
  17. Приклад 4. Краулер Web-сайту
  18. Лістинг 7. Простий краулер Web-сайтів на мові Python (minispider.py)
  19. Лістинг 8. Вихідна інформація сценарію minispider
  20. Linux-інструменти для побудови Web-павуків
  21. Юридичні аспекти
  22. Що далі
  23. Ресурси для скачування

Прості програмні агенти типу spider і scraper для збору Інтернет-контенту

Павук (spider) - це програма, "плазують" по Інтернету певним чином і з певною метою. Мета може полягати в зборі інформації або в розумінні структури будь-якого Web-сайту і його корисності. На застосуванні павуків засновані сучасні пошукові машини, такі як Google і AltaVista. Такі павуки автоматично витягають дані з Web-сайту і передають їх іншим додаткам, які індексують контент цього Web-сайту з метою формування найкращого набору пошукових термінів.

Web-павук (Web-spider) як програмний агент

Web spider або Web scraper - це різновиди програмних роботів чи агентів (в термінології, запропонованої Аланом Кей (Alan Kay) на початку 1980-х років). За задумом А. Кея, програмний агент повинен діяти в якості посередника (proxy) між користувачем і комп'ютерним світом. Такий агент може мати певну мету і працювати над досягненням цієї мети в відведеної йому області. Якщо агент "спотикається", він може запросити рекомендацію від користувача, після чого продовжити виконання покладеного на нього завдання.

Сучасні програмні агенти класифікуються за такими атрибутами, як автономність, адаптивність, комунікативність і здатність до спільної роботи з іншими агентами. В даний час предметом досліджень в області агентів є такі напрямки, такі як мобільність і навіть індивідуальність агента. Розглянуті в даній статті павуки (Web spider) відносяться до категорії агентів, призначених для виконання конкретного завдання (Task-Specific Agent).

"Web-скребок" (Web scraper) - цей агент, який діє аналогічно Web-павукам, але більш цікавий з юридичної точки зору. Scraper - це різновид павука яка спрямована на роботу з певним Інтернет-контентом, наприклад, з даними про вартість продуктів або послуг. Один з варіантів застосування scraper-агентів - т.зв. конкурентне ціноутворення, т. е. виявлення існуючих на ринку цін на певну категорію товарів з метою встановлення відповідних цін на власну продукцію. Крім того, scraper здатний об'єднувати дані з декількох джерел в Інтернеті і надавати цю підсумкову інформацію користувачеві.

біологічні аналогії

Справжній павук в реальній обстановці існує не ізольовано, а у взаємодії з навколишнім середовищем. Такий павук бачить і відчуває обстановку навколо себе і переміщається з одного пункту в інший відповідно до визначеної мети. Web-павуки діють аналогічним чином. Web-павук - це програма, написана на будь-якій мові високого рівня. Така програма взаємодіє з навколишнім середовищем за допомогою мережевих протоколів, наприклад, Інтернет-протоколу HTTP. Якщо ваш павук захоче зв'язатися з вами, він може послати повідомлення по електронній пошті за допомогою протоколу SMTP.

Однак можливості Web-павуків не обмежуються протоколом HTTP або SMTP. Деякі павуки здатні використовувати технології Web-сервісів, наприклад, SOAP, або протокол XML-RPC. Інші павуки переглядають мережеві телеконференції за допомогою протоколу NNTP або шукають цікаву інформацію в новинних RSS-потоках. На відміну від реальних павуків, більшість з яких здатні розрізняти тільки зміни інтенсивності світла і фіксувати тільки рухомі об'єкти, Web-павуки "бачать" і "відчувають" за допомогою протоколів декількох типів.

Області застосування spider- і scraper-агентів

Очі і ноги павука

Основними органами зору і переміщення Web-павука в Інтернеті є HTTP - орієнтований на повідомлення протокол, за допомогою якого клієнт підключається до сервера і посилає запити. У відповідь на ці запити сервер генерує відгук. Кожен запит або відгук складається з заголовка і тіла. Тема містить інформацію про стан і опис вмісту тіла.

Протокол HTTP підтримує запити трьох основних типів. Запит типу HEAD запитує інформацію про активи певного сервера. Запит типу GET запитує сам актив, наприклад, файл або зображення. Запит типу POST дозволяє клієнту взаємодіяти з сервером через Web-сторінку (звичайно через Web-форму).

Web spider і Web scraper - це дуже корисні додатки. Різні типи таких додатків застосовуються досить широко, причому, як з добрим, так і зі злим умислом. Розглянемо деякі області їх застосування.

Web-краулери пошукової машини

Web-павуки спрощують пошук в Інтернеті і підвищують його ефективність. Пошукова машина використовує безліч Web-павуків ( "краулерів" - crawlers), які повзають по Web-сторінок в Інтернеті, витягують з цих сторінок контент і індексують його. Після виконання цього етапу роботи пошукова машина зможе швидко переглянути локальний індекс на предмет виявлення найбільш придатних результатів для заданого вами пошуку. Пошукова машина Google додатково використовує алгоритм PageRank, який ранжує результати пошуку за кількістю зв'язків інших сторінок з кожної знайденої сторінкою. Таким чином, реалізується механізм голосування, при якому сторінки з максимальним числом голосів отримують найвищий рейтинг в результатах пошуку.

Подібний пошук в Інтернеті може виявитися досить дорогим, як з точки зору пропускної спроможності, необхідної для передачі Web-контенту індексатора, так і з точки зору обчислювальних витрат на індексування результатів. Крім того, для даного способу потрібен великий обсяг ресурсів зберігання, хоча сьогодні це вже не є великою проблемою - наприклад, Google пропонує 1000 Мб зберігання кожному користувачеві поштової служби Gmail.

Web-павуки мінімізують породжуються ними навантаження на Інтернет за допомогою набору політик. Щоб уявити масштаби проблеми, необхідно врахувати, що Google індексує більше 8 млрд. Web-сторінок. Політики поведінки визначають, які сторінки Web-краулер повинен вводити в індексатор і як часто Web-краулер повинен повертатися на будь-якої Web-сайт для повторної перевірки, а також т.зв. "Політику ввічливості". Web-сервери можуть забороняти роботу краулерів за допомогою стандартного файлу robot.txt, який повідомляє краулер про те, що можна, а що не можна переглядати на даному сервері.

Корпоративні Web-краулери

Як і стандартний павук пошукової машини, корпоративний Web-павук індексує контекст, недоступний звичайним відвідувачам. Наприклад, компанії зазвичай підтримують внутрішні Web-сайти для своїх співробітників. В цьому випадку область дії павука обмежена локальної середовищем. Обмеження області пошуку зазвичай підвищує запас доступної обчислювальної потужності, щоб створювати спеціалізовані та повніші індекси. Компанія Google зробила ще один крок в цьому напрямку, надавши пошукову машину для індексації контенту користувача персонального комп'ютера.

Спеціалізовані Web-краулери

Існує також ряд нетрадиційних варіантів застосування краулерів, наприклад, при архівації контенту або генерації статистичної інформації. Архівний краулер переглядає Web-сайт і виявляє локальний контент, який підлягає тривалому зберіганню. Такий краулер може бути використаний для резервного копіювання або, в більш загальному випадку, для отримання моментальних знімків певного контенту в Інтернеті. Статистичний краулер може виявитися корисним для розуміння певного Інтернет-контенту або для виявлення відсутності такого контенту. Краулери здатні визначати, скільки Web-серверів функціонує в даний момент, скільки Web-серверів певного типу функціонує в даний момент і навіть кількість недіючих посилань (тобто посилань, які повертають помилку HTTP 404 - сторінка не знайдена).

Ще одним корисним типом спеціалізованих краулерів є краулери для перевірки Web-сайтів. Краулери цього типу шукають відсутній контент, перевіряють всі посилання і гарантують коректність HTML-коду.

Web-краулери для аналізу електронної пошти

Тепер звернемося до негативних аспектів. На жаль, лише кілька паршивих овець можуть істотно ускладнити користування Інтернетом безлічі добропорядних користувачів. Web-краулери для аналізу електронної пошти шукають на Web-сайтах електронні адреси, які потім використовуються для розсилки величезних кількостей спаму, з яким ми стикаємося щодня. Так, служба Postini повідомила, що станом на серпень 2005 р 70% електронних листів, переглянутих її користувачами, виявилися небажаним спамом.

Аналіз електронної пошти є однією з найпростіших завдань для краулерів, в чому ви зможете переконатися в заключному прикладі даної статті.

Тепер, коли ви отримали основні відомості про spider- і scraper-агентах, перейдемо до прикладів, які демонструють, наскільки легко створити такі агенти для Linux за допомогою сучасних мов сценаріїв Ruby і Python.

Приклад 1. Простий агент типу scraper

Розглянутий в даному прикладі агент з'ясовує, на основі якого Web-сервера працює даний Web-сайт. Відповідь на це питання може виявитися вельми цікавим, а при обробці досить великий вибірки може надати захоплюючі статистичні результати щодо поширеності Web-серверів певних типів в державних установах, в навчальних закладах, в галузевих організаціях і т.д.

На лістингу 1 показаний сценарій на мові Ruby, в якому Web-сайт аналізується з метою виявлення типу використовуваного HTTP-сервера. Клас Net :: HTTP реалізує HTTP-клієнта і HTTP-методи GET, HEAD і POST. Кожен раз, коли ви звертаєтеся із запитом до HTTP-сервера, один з фрагментів відповідного HTTP-повідомлення завжди містить інформацію про тип сервера, на якому зберігається даний контент. Замість того щоб завантажувати сторінку з даного сайту, я обмежився використанням методу HEAD для отримання інформації про кореневої сторінці ( '/'). Якщо HTTP-сервер успішно відповідає (що демонструється кодом відповіді "200"), здійснюється итеративное проходження по кожному рядку відповіді в пошуках ключа server і в разі його знаходження друкується відповідне значення. Значення цього ключа є рядок, що представляє тип HTTP-сервера.

Лістинг 1. Сценарій на мові Ruby для простого аналізу метаданих (srvinfo.rb)
#! / Usr / local / bin / ruby ​​require 'net / http' # Get the first argument from the command-line (the URL) url = ARGV [0] begin # Create a new HTTP connection httpCon = Net :: HTTP. new (url, 80) # Perform a HEAD request resp, data = httpCon.head ( "/", nil) # If it succeeded (200 is success) if resp.code == "200" then # Iterate through the response hash resp.each {| key, val | # If the key is the server, print the value if key == "server" then print "The server at" + url + "is" + val + "\ n" end} end end

На лістингу 2 показаний порядок використання сценарію srvinfo і приведені деякі результати його взаємодії з рядом державних, освітніх і комерційних Web-сайтів. Результати не відрізняються великою різноманітністю - в 68% випадків застосовується Web-сервер Apache, в інших випадках - Web-сервери Sun і Microsoft® Internet Information Services (IIS). В одному з випадків Web-сайт не повідомила про тип використовуваного Web-сервера. Цікаво відзначити, що Федеративна держава Мікронезія використовує стару версію Web-сервера Apache (яку давно пора оновити), в той час як сама організація Apache.org - найновішу версію.

Лістинг 2. Приклад використання агента для визначення типу Web-сервера
[Mtj @ camus] $ ./srvrinfo.rb www.whitehouse.gov The server at www.whitehouse.gov is Apache [mtj @ camus] $ ./srvrinfo.rb www.cisco.com The server at www.cisco.com is Apache / 2.0 (Unix) [mtj @ camus] $ ./srvrinfo.rb www.gov.ru The server at www.gov.ru is Apache / 1.3.29 (Unix) [mtj @ camus] $ ./srvrinfo. rb www.gov.cn [mtj @ camus] $ ./srvrinfo.rb www.kantei.go.jp The server at www.kantei.go.jp is Apache [mtj @ camus] $ ./srvrinfo.rb www.pmo .gov.to The server at www.pmo.gov.to is Apache / 2.0.46 (Red Hat Linux) [mtj @ camus] $ ./srvrinfo.rb www.mozambique.mz The server at www.mozambique.mz is Apache / 1.3.27 (Unix) PHP / 3.0.18 PHP / 4.2.3 [mtj @ camus] $ ./srvrinfo.rb www.cisco.com The server at www.cisco.com is Apache / 1.0 (Unix) [ mtj @ camus] $ ./srvrinfo.rb www.mit.edu The server at www.mit.edu is MIT Web Server Apache / 1.3.26 Mark / 1.5 (Unix) mod_ssl / 2.8.9 OpenSSL / 0.9.7c [mtj @camus] $ ./srvrinfo.rb www.stanford.edu The server at www.stanford.edu is Apache / 2.0.54 (Debian GNU / Linux) mod_fastcgi / 2.4.2 mod_ssl / 2.0.54 OpenSSL розділі / 0 .9.7e WebAuth / 3.2.8 [mtj @ camus] $ ./srvrinfo.rb www.fsmgov.org The server at www.fsmgov.org is Apache / 1.3.27 (Unix) PHP / 4.3.1 [mtj @ camus ] $ ./srvrinfo.rb www.csuchico.edu The server at www.csuchico.edu is Sun-ONE-Web-Server / 6.1 [mtj @ camus] $ ./srvrinfo.rb www.sun.com The server at www .sun.com is Sun Java System Web Server 6.1 [mtj @ camus] $ ./srvrinfo.rb www.microsoft.com The server at www.microsoft.com is Microsoft-IIS / 6.0 [mtj @ camus] $ ./srvrinfo .rb www.apache.org The server at www.apache.org is Apache / 2.2.3 (Unix) mod_ssl / 2.2.3 OpenSSL / 0.9.7g

Це корисні дані, що дозволяють побачити, які типи Web-серверів застосовуються в державних і освітніх організаціях. У наступному прикладі показаний більш корисний агент для знаходження біржових котирувань.

Приклад 2. Агент типу scraper для знаходження біржових котирувань

У цьому прикладі я написав простий агент типу Web scraper (інша назва - screen scraper) для збору інформації про котируваннях акцій. Застосовано метод "грубої сили", заснований на застосуванні шаблону до відповідної Web-сторінці:

Лістинг 3. Простий Web-агент для знаходження біржових котирувань
#! / Usr / local / bin / ruby ​​require 'net / http' host = "www.smartmoney.com" link = "/eqsnaps/index.cfm?story=snapshot&symbol="+ARGV[0] begin # Create a new HTTP connection httpCon = Net :: HTTP.new (host, 80) # Perform a HEAD request resp = httpCon.get (link, nil) stroffset = resp.body = ~ / class = "price"> / subset = resp.body .slice (stroffset + 14, 10) limit = subset.index ( '<') print ARGV [0] + "current stock price" + subset [0..limit-1] + "(from stockmoney.com) \ n "end

У цьому Ruby-сценарії відкривається з'єднання HTTP-клієнта з сервером (в даному випадку з сервером www.smartmoney.com) і встановлюється канал, запитувач котирування акцій в тому вигляді, в якому вона була задана користувачем (за допомогою & symbol = <symbol>). Я запитують цей канал за допомогою HTTP-методу GET (для вилучення повної сторінки відгуку) і потім задаю пошук class = "price" >>, за яким відразу ж слід поточна ціна акції. Ця інформація витягується з Web-сторінки і потім відображається користувачеві.

Як показано в лістингу 4, для використання агента біржових котирувань я просто викликав сценарій з цікавлять мене стандартним символом цінного паперу.

Лістинг 4. Приклад використання Web-агента для знаходження біржових котирувань
[Mtj @ camus] $ ./stockprice.rb ibm ibm current stock price 79.28 (from stockmoney.com) [mtj @ camus] $ ./stockprice.rb intl intl current stock price 21.69 (from stockmoney.com) [mtj @ camus ] $ ./stockprice.rb nt nt current stock price 2.07 (from stockmoney.com) [mtj @ camus] $

Приклад 3. Спілкування користувача з агентом для знаходження біржових котирувань

Показаний в Прімері 2 scraper-агент для знаходження біржових котирувань виглядає вельми привабливо, проте дійсну користь він принесе в тому випадку, якщо зможе здійснювати регулярний моніторинг курсу акцій і повідомляти користувачеві, якщо ціна цікавлять його акцій піднялися вище певного порогу або опустилася нижче іншого порога. Зараз ми побачимо, як це робиться. У показаному на лістингу 5 сценарії я допрацював простий Web scraper - тепер він здійснює регулярний моніторинг курсу акцій і відсилає повідомлення по електронній пошті, якщо курс акцій вийшов за межі встановленого коридору цін.

Лістинг 5. Web-агент для знаходження біржових котирувань з можливістю відсилання повідомлень по електронній пошті
#! / Usr / local / bin / ruby ​​require 'net / http' require 'net / smtp' # # Given a web-site and link, return the stock price # def getStockQuote (host, link) # Create a new HTTP connection httpCon = Net :: HTTP.new (host, 80) # Perform a HEAD request resp = httpCon.get (link, nil) stroffset = resp.body = ~ / class = "price"> / subset = resp.body.slice (stroffset + 14, 10) limit = subset.index ( '<') return subset [0..limit-1] .to_f end # # Send a message (msg) to a user. # Note: assumes the SMTP server is on the same host. # Def sendStockAlert (user, msg) lmsg = [ "Subject: Stock Alert \ n", "\ n", msg] Net :: SMTP.start ( 'localhost') do | smtp | smtp.sendmail (lmsg, "[email protected]", [user]) end end # # Our main program, checks the stock within the price band every two # minutes, emails and exits if the stock price strays from the band. # # Usage: ./monitor_sp.rb <symbol> <high> <low> <email_address> # begin host = "www.smartmoney.com" link = "/eqsnaps/index.cfm?story=snapshot&symbol =" + ARGV [ 0] user = ARGV [3] high = ARGV [1] .to_f low = ARGV [2] .to_f while 1 price = getStockQuote (host, link) print "current price", price, "\ n" if (price> high) || (Price <low) then if (price> high) then msg = "Stock" + ARGV [0] + "has exceeded the price of" + high.to_s + "\ n" + host + link + "\ n" end if ( price <low) then msg = "Stock" + ARGV [0] + "has fallen below the price of" + low.to_s + "\ n" + host + link + "\ n" end sendStockAlert (user, msg) exit end sleep 120 end end

Цей сценарій на мові Ruby трохи довший, але є розвиток попереднього сценарію Web-агента для знаходження біржових котирувань, показаного на лістингу 3 . У сценарії використана нова функція getStockQuote, яка інкапсулює функцію аналізу біржових котирувань. Інша функція - sendStockAlert - посилає повідомлення за вказаною користувачем адресою електронної пошти. Основна програма являє собою цикл, в якому здійснюється отримання поточної ціни акцій, перевірка цієї ціни на потрапляння в заданий ціновий коридор, і - в разі виходу за межі коридору - відсилання користувачеві повідомлення по електронній пошті. Я також ввів затримку між операціями перевірки ціни, оскільки є ввічливою людиною і не хочу перевантажувати опитуваний сервер.

На лістингу 6 як приклад показаний виклик монітора акцій популярної технологічної компанії. Кожні дві хвилини здійснюється перевірка ціни акцій і виведення результатів на друк. Якщо ціна акції вийшла за верхню межу, агент посилає повідомлення по електронній пошті, і сценарій завершується.

Лістинг 6. Демонстрація роботи монітора акцій
[Mtj @ camus] $ ./monitor_sp.rb ibm 83.00 75.00 [email protected] current price 82.06 current price 82.32 current price 82.75 current price 83.36

На Рис. 1. показано попереджувала лист з посиланням на джерело даних.

Мал. 1. Повідомлення, яке послав по електронній пошті Ruby-сценарій з лістингу 5

Тимчасово залишимо агенти типу scraper і перейдемо до розгляду принципів побудови Web-павуків.

Приклад 4. Краулер Web-сайту

У завершальному прикладі я досліджую можливості Web-павука, що переміщається по Web-сайту. З міркувань безпеки я уникаю блукань за межами цього Web-сайту, а замість цього просто аналізую одну Web-сторінку.

Для обходу Web-сайту і відстеження містяться на ньому посилань необхідно здійснювати структурний аналіз HTML-сторінок. Структурний аналіз Web-сторінки дозволяє виявити посилання на інші ресурси. Деякі з цих посилань вказують на локальні ресурси (файли), а інші - на зовнішні ресурси (наприклад, на інші Web-сторінки).

Обхід Web-сайту починається із заданою Web-сторінки. Виявлені на цій сторінці посилання ставляться в чергу на відвідування, після чого цей процес повторюється, починаючи з першого об'єкта з черги на відвідування. Це так званий пошук типу "спочатку вшир" (на відміну від пошуку "в глибину", при якому проводиться послідовне поглиблення по першій виявленої посиланням).

Якщо уникати нелокальних посилань і заглиблюватися тільки по локальним Web-сторінок, вийде Web-краулер для одного Web-сайту, показаний на лістингу 7. В даному випадку я перейшов з мови Ruby на мову Python, що дозволило застосувати корисний клас HTMLParser (аналізатор HTML- коду).

Лістинг 7. Простий краулер Web-сайтів на мові Python (minispider.py)
#! / Usr / local / bin / python import httplib import sys import re from HTMLParser import HTMLParser class miniHTMLParser (HTMLParser): viewedQueue = [] instQueue = [] def get_next_link (self): if self.instQueue == []: return '' else: return self.instQueue.pop (0) def gethtmlfile (self, site, page): try: httpconn = httplib.HTTPConnection (site) httpconn.request ( "GET", page) resp = httpconn.getresponse () resppage = resp.read () except: resppage = "" return resppage def handle_starttag (self, tag, attrs): if tag == 'a': newstr = str (attrs [0] [1]) if re.search ( 'http', newstr) == None: if re.search ( 'mailto', newstr) == None: if re.search ( 'htm', newstr)! = None: if (newstr in self.viewedQueue) == False: print "adding", newstr self.instQueue.append (newstr) self.viewedQueue.append (newstr) else: print "ignoring", newstr else: print "ignoring", newstr else: print "ignoring", newstr def main (): if sys.argv [1] == '': print "usage is ./minispider.py site link" sys.exit (2) mySpider = miniHTMLParse r () link = sys.argv [2] while link! = '': print "\ nChecking link", link # Get the file from the site and link retfile = mySpider.gethtmlfile (sys.argv [1], link) # Feed the file into the HTML parser mySpider.feed (retfile) # Search the retfile here # Get the next link in level traversal order link = mySpider.get_next_link () mySpider.close () print "\ ndone \ n" if __name__ = = "__main__": main ()

Базова схема цього краулер заснована в завантаженні першого посилання в чергу для перевірки. У цій черзі знаходяться кандидати на подальше обстеження. Всі нові посилання, виявлені в ході перевірки будь-якого посилання, завантажується в цю ж чергу. Таким чином, реалізується механізм пошуку "спочатку вшир". Я також підтримую чергу вже переглянутих посилань і уникаю поглиблення по будь-якому посиланню, яку побачив раніше. Це практично все, основна частина реальної роботи здійснюється аналізатором HTML-коду.

Спочатку на основі класу HTMLParser мови Python я створив новий клас miniHTMLParser. Цей клас вирішує кілька завдань. По-перше, це мій HTML-аналізатор, який застосовує метод зворотного виклику (handle_starttag) при кожній зустрічі з початковим HTML-тегом. Я також використав цей клас для доступу до посилань, зустрінутим в процесі обходу (get_next_link), і для вилучення файлу, представленого відповідним посиланням (в даному випадку, HTML-файлу).

В цьому класі присутні дві змінні екземпляра - viewedQueue (містить посилання, які вже обстежені до поточного моменту) і instQueue (яка представляє ще не обстежені посилання).

Ви бачите, що методи цього класу досить прості. Метод get_next_link перевіряє, чи є чергу instQueue порожній, і в цьому випадку повертає символ ''. В іншому випадку за допомогою методу pop здійснюється повернення наступного об'єкта. Метод gethtmlfile за допомогою HTTPConnectionK підключається до Web-сайту повертає контент заданої сторінки. І, нарешті, для кожного початкового тега Web-сторінки викликається handle_starttag (початковий тег надсилається в HTML-аналізатор за допомогою методу feed). У цій функції я перевіряю, чи є посилання нелокальної (містить http), чи є посилання поштовою адресою (містить mailto) і містить посилання 'htm', що з високим ступенем ймовірності вказує на те, що це Web-сторінка. Я також переконуюся в тому, що не відвідувала це посилання раніше, і якщо немає, ця посилання завантажується в мої черзі - в чергу кандидатів на подальше обстеження і в чергу переглянутих посилань.

Метод main є досить простим. Я створюю новий екземпляр класу miniHTMLParser і починаю обхід з Web-сайту (argv [1]) і посилання (argv [2]), що задаються користувачем. Я фіксую вміст цієї посилання, відсилаю його в HTML-аналізатор і захоплюють наступне посилання для відвідування, якщо така існує. Цей цикл повторюється до тих пір, поки залишаються невідвідані посилання.

Для виклику Web-павука користувачеві необхідно надати адресу Web-сайту і посилання:

./minispider.py www.fsf.org /

В даному випадку я запросив кореневої файл з Web-сайту організації Free Software Foundation. Результати виконання цієї команди представлені на лістингу 8. Ви бачите нові посилання, додані в чергу кандидатів на подальше обстеження, і проігноровані посилання, такі як посилання на нелокальних ресурси. У нижній частині лістингу проводиться обстеження посилань, виявлених в кореневому файлі.

Лістинг 8. Вихідна інформація сценарію minispider
[Mtj @ camus] $ ./minispider.py www.fsf.org / Checking link / ignoring hiddenStructure ignoring http://www.fsf.org ignoring http://www.fsf.org ignoring http: //www.fsf .org / news ignoring http://www.fsf.org/events ignoring http://www.fsf.org/campaigns ignoring http://www.fsf.org/resources ignoring http://www.fsf.org / donate ignoring http://www.fsf.org/associate ignoring http://www.fsf.org/licensing ignoring http://www.fsf.org/blogs ignoring http://www.fsf.org/about ignoring https://www.fsf.org/login_form ignoring http://www.fsf.org/join_form ignoring http://www.fsf.org/news/fs-award-2005.html ignoring http: // www .fsf.org / news / fsfsysadmin.html ignoring http://www.fsf.org/news/digital-communities.html ignoring http://www.fsf.org/news/patents-defeated.html ignoring / news / RSS ignoring http://www.fsf.org/news ignoring http://www.fsf.org/blogs/rms/entry-20050802.html ignoring http://www.fsf.org/blogs/rms/entry- 20050712.html ignoring http://www.fsf.org/blogs/rms/entry-20050601.html ignoring http: // ww w.fsf.org/blogs/rms/entry-20050526.html ignoring http://www.fsf.org/blogs/rms/entry-20050513.html ignoring http://www.fsf.org/index_html/SimpleBlogFullSearch ignoring documentContent ignoring http://www.fsf.org/index_html/sendto_form ignoring javascript: this.print (); adding licensing / essays / free-sw.html ignoring / licensing / essays ignoring http://www.gnu.org/philosophy ignoring http://www.freesoftwaremagazine.com ignoring donate ignoring join_form adding associate / index_html ignoring http: // order.fsf.org adding donate / patron / index_html adding campaigns / priority.html ignoring http://r300.sf.net/ ignoring http://developer.classpath.org/mediation/OpenOffice2GCJ4 ignoring http: //gcc.gnu .org / java / index.html ignoring http://www.gnu.org/software/classpath/ ignoring http://gplflash.sourceforge.net/ ignoring campaigns adding campaigns / broadcast-flag.html ignoring http: // www .gnu.org ignoring / fsf / licensing ignoring http://directory.fsf.org ignoring http://savannah.gnu.org ignoring mailto: [email protected] ignoring http://www.fsf.org/Members/ root ignoring http://www.plonesolutions.com ignoring http://www.enfoldtechnology.com ignoring http://blacktar.com ignoring http://plone.org ignoring http://www.section508.gov ignoring http: //www.w3.org/WAI/WCAG1AA-Conforma nce ignoring http://validator.w3.org/check/referer ignoring http://jigsaw.w3.org/css-validator/check/referer ignoring http://plone.org/browsersupport Checking link licensing / essays / free -sw.html ignoring mailto: webmaster Checking link associate / index_html ignoring mailto: webmaster Checking link donate / patron / index_html ignoring mailto: webmaster Checking link campaigns / priority.html ignoring mailto: webmaster Checking link campaigns / broadcast-flag.html ignoring mailto : webmaster done [mtj @ camus] $

У цьому прикладі показана робота Web-павука в якості краулер. Після того, як клієнт прочитає файл, можна просканувати відповідну сторінку в пошуках потрібного контенту, як і в разі індексатора.

Linux-інструменти для побудови Web-павуків

Ми показали приклади створення scraper- і spider-агентів. Цю ж функціональність можна реалізувати і за допомогою Linux-інструментів.

Корисна команда wget (Web get) дозволяє організувати рекурсивную роботу з Web-сайтом і збір цікавить вас контенту. Ви можете вказати певний Web-сайт, що цікавить вас контент і деякі інші адміністративні функції. Ця команда перекачує потрібні файли на ваш локальний комп'ютер. Наприклад, команда такого вигляду підключить вас до заданого URL-адресою та рекурсивно опуститься не більше ніж на три рівні, збираючи по шляху все файли з розширеннями mp3, mpg, mpeg і avi.

wget -A mp3, mpg, mpeg, avi -r -l 3 http: // <some URL>

Команда curl діє аналогічним чином. Її перевага полягає в тому, що в даний час вона активно допрацьовується. Ви можете використовувати і інші подібні команди - snarf, fget і fetch.

Юридичні аспекти

З приводу застосування Web-павуків для аналізу інформації в Інтернеті було подано кілька судових позовів, і всі вони були прийняті до розгляду. Нещодавно компанія Farechase, Inc. відповідала в суді за позовом компанії American Airlines щодо застосування scraper-агентів, що працюють в реальному часі. Спочатку в цьому позові стверджувалося, що збір даних порушив угоди компанії American Airlines зі своїми клієнтами (що входять до складу документа Умови). Після того, як ця претензія була відкинута, компанія American Airlines подала позов про заподіяння шкоди, який був задоволений. В інших позовах стверджувалося, що пропускна здатність, споживана spider- і scraper-агентами, погіршує умови роботи інших користувачів. Всі подібні претензії є цілком обґрунтованими, що обумовлює необхідність дотримання норм ввічливості. Додаткова інформація з цього питання наведена в розділі ресурси .

Що далі

Застосування Web-павуків для інформаційного аналізу Інтернету може виявитися вельми цікавим - а для деяких і вельми прибутковим - заняттям. Однак, як зазначалося вище, цей вид діяльності має певні юридичні аспекти. Застосовуючи Web-павуків, завжди підкоряйтеся вказівкам файлу robots.txt, що знаходиться на уже згадуваному Web-сервері, і включайте цю вимогу в свою політику ввічливості. Більш сучасні технології, такі як SOAP, істотно спрощують роботу Web-павуків і зменшують їх негативний вплив на звичайні Інтернет-операції. Перспективні розробки, такі як семантичні мережі, зроблять роботу павуків ще простіше, тому кількість відповідних рішень і методів буде безперервно збільшуватися.

Ресурси для скачування

Схожі тими

  • оригінал статті Build a Web spider on Linux
  • сторінка Web crawler енциклопедії Wikipedia є відмінним ресурсом по Web-краулер, включаючи історію їх розвитку та політики застосування Web-краулерів.
  • За посиланням Email Spiders пропонується цікава інформація про павуків для аналізу електронної пошти (e-mail spider) і про способи боротьби з ними.
  • Web Robots Pages - один з найстаріших Web-сайтів по Web-роботам, на якому представлена ​​важлива інформація по протоколу виконання роботів (для реалізації політики ввічливості).
  • " Scrapers, Robots and Spiders: The Battle Over Internet Data Mining "(Gesmer Updegrove LLP, 2006) - цікавий огляд з юридичних і етичних аспектів застосування Web-павуків різних типів, що включає обговорення судового спору між компаніями American Airlines і Farechase, Inc.
  • на странице Source Code for Web Robot Spiders Web-сайту Searchtools.com надано вихідний код для створення роботів з відкритим кодом, призначених для вирішення різних завдань (на декількох мовах).
  • В зоні Linux сайту developerWorks можна знайти додаткові ресурси для Linux-розробників.
  • Використовуйте в своєму наступному проекті розробки для Linux ознайомчі версії програмного забезпечення IBM , Які можна скачати безпосередньо з сайту developerWorks.

Підпішіть мене на ПОВІДОМЛЕННЯ до коментарів

Cfm?
Cfm?

Новости