Какви са плюсовете и минусите на различните начини за анализ на уебсайтове?

Бих искал да напиша някакъв код, който разглежда уебсайт и неговите активи и създава някои статистики и отчет. Активите ще включват изображения. Бих искал да мога да проследя връзки или поне да се опитам да идентифицирам менютата на страницата. Бих искал също така да предположа каква CMS е създала сайта, въз основа на имена на класове и други подобни.

Ще приема, че сайтът е сравнително статичен или се управлява от CMS, но не е нещо като RIA.

Идеи за това как мога да напредна.

1) Заредете сайта в iFrame. Това би било хубаво, защото мога да го анализирам с jQuery. Или бих могъл? Изглежда, че ще бъда възпрепятстван от правилата за скриптове между сайтове. Виждал съм предложения за заобикаляне на тези проблеми, но предполагам, че браузърите ще продължат да ограничават подобни неща. Ще помогне ли букмарклет?

2) Добавка за Firefox. Това ще ми позволи да заобиколя проблемите със скриптове между сайтове, нали? Изглежда осъществимо, защото инструментите за отстраняване на грешки за Firefox (и GreaseMonkey, за този въпрос) ви позволяват да правите всякакви неща.

3) Вземете сайта от страната на сървъра. Използвайте библиотеки на сървъра за анализ.

4) YQL. Това не е ли създадено за анализиране на сайтове?


person Nosredna    schedule 28.05.2009    source източник


Отговори (7)


Това наистина зависи от мащаба на вашия проект. Ако е просто случаен, не напълно автоматизиран, силно бих препоръчал Firefox Addon.

Аз съм точно в средата на подобен проект. Той трябва да анализира DOM на страница, генерирана с помощта на Javascript. Написването на браузър от страна на сървъра беше твърде трудно, така че се обърнахме към някои други технологии: Adobe AIR, Firefox Addons, потребителски скриптове и т.н.

Fx addon е страхотен, ако нямате нужда от автоматизация. Скрипт може да анализира страницата, да ви покаже резултатите, да ви помоли да коригирате частите, за които не е сигурно, и накрая да публикува данните в някакъв бекенд. Имате достъп до целия DOM, така че не е необходимо да пишете JS/CSS/HTML/какъвто и да е анализатор (това би било адска работа!)

Друг начин е Adobe AIR. Тук имате по-голям контрол върху приложението — можете да го стартирате във фонов режим, като правите целия парсинг и анализ без ваше участие. Недостатъкът е - нямате достъп до всички DOM на страниците. Единственият начин да преминете през това е да настроите прост прокси, който извлича целеви URL адрес, добавя малко Javascript (за създаване на надежден-ненадежден пясъчен мост)... Това е мръсен хак, но работи.

Редактиране: В Adobe AIR има два начина за достъп до DOM на чужд уебсайт:

  • Заредете го чрез Ajax, създайте обект HTMLLoader и подайте отговора в него (loadString метод IIRC)
  • Създайте iframe и заредете сайта в ненадеждна пясъчна среда.

Не помня защо, но първият метод се провали за мен, така че трябваше да използвам другия (мисля, че имаше някои причини за сигурност, които не можах да заобиколя). И трябваше да създам пясъчна кутия за достъп до DOM на сайта. Ето малко за занимаване с пясъчни мостове. Идеята е да се създаде прокси, което добавя прост JS, който създава childSandboxBridge и излага някои методи на родителя (в този случай: приложението AIR). Съдържанието на скрипта е нещо като:

window.childSandboxBridge = {
   // ... some methods returning data
}

(бъдете внимателни — има ограничения за това, което може да бъде предадено през пясъчната кутия — със сигурност няма сложни обекти! използвайте само примитивните типове)

И така, проксито основно подправя всички заявки, които връщат HTML или XHTML. Всички останали бяха преминати непроменени. Направих това с помощта на Apache + PHP, но със сигурност може да се направи с истински прокси с някои плъгини/персонализирани модули. По този начин имах достъп до DOM на всеки сайт.

край на редакцията.

Третият начин, за който знам, най-трудният начин — настройте среда, подобна на тази в browsershots. Тогава използвате firefox с автоматизация. Ако имате Mac OS X на сървър, можете да играете с ActionScript, за да извърши автоматизацията вместо вас.

И така, да обобщим:

  • PHP/сървърен скрипт — трябва да внедрите свой собствен браузър, JS двигател, CSS анализатор и т.н. и т.н. Напълно под контрол и вместо това автоматизирани.
  • Firefox Addon — има достъп до DOM и всички други неща. Изисква потребител да работи с него (или поне отворена firefox сесия с някакъв вид автоматично презареждане). Приятен интерфейс за потребителя, който да ръководи целия процес.
  • Adobe AIR — изисква работещ настолен компютър, по-трудно от създаването на Fx addon, но по-мощен.
  • Автоматизиран браузър — по-скоро проблем с програмирането за настолни компютри, отколкото уеб разработката. Може да се настрои на linux терминал без графична среда. Изисква майсторски хакерски умения. :)
person Maciej Łebkowski    schedule 01.06.2009
comment
Страхотен отговор. Правил съм Adobe AIR преди. Можете ли да разясните малко по този въпрос? Единственият начин да преминете през това е да настроите прост прокси, който извлича целеви URL адрес, добавя малко Javascript (за създаване на надежден-ненадежден пясъчен мост)... Това е мръсен хак, но работи. - person Nosredna; 01.06.2009
comment
редактирах отговора си, за да добавя повече за метода Adobe AIR. Все пак не избрах този метод, така че познанията ми са малко ограничени. :) - person Maciej Łebkowski; 01.06.2009

Моето предложение би било:

a) Изберете скриптов език. Предлагам Perl или Python: също curl+bash, но е лошо, без обработка на изключения.

b) Заредете началната страница чрез скрипт, като използвате библиотека на python или perl. Опитайте Perl WWW::Mechanize модул.

Python има изобилие от вградени модули, опитайте да погледнете и на www.feedparser.org

c) Проверете заглавката на сървъра (чрез командата HTTP HEAD), за да намерите името на сървъра за приложения. Ако имате късмет, ще намерите и името на CMS (i.d. WordPress и т.н.).

d) Използвайте Google XML API, за да зададете нещо като "link:sitedomain.com", за да намерите връзки, сочещи към сайта: отново ще намерите примери за код за Python на началната страница на google. Също така запитването за класиране на домейн към Google може да бъде полезно.

д) Можете да съберете данните в SQLite db, след което да ги обработите след това в Excel.

person daitangio    schedule 01.06.2009

Трябва просто да извлечете източника (XHTML/HTML) и да го анализирате. Можете да направите това на почти всеки модерен език за програмиране. От вашия собствен компютър, който е свързан към интернет.

iframe е джаджа за показване на HTML съдържание, не е технология за анализ на данни. Можете да анализирате данни, без да ги показвате навсякъде. Дори не се нуждаете от браузър.

Инструменти на езици като Python, Java, PHP със сигурност са по-мощни за вашите задачи от Javascript или каквото и да имате в тези разширения на Firefox.

Също така няма значение каква технология стои зад уебсайта. XHTML/HTML е просто низ от знаци, без значение как браузърът го изобразява. За да намерите вашите „активи“, просто ще потърсите конкретни HTML тагове като „img“, „object“ и т.н.

person jbasko    schedule 28.05.2009
comment
Благодаря. Мисълта ми с iFrame беше да накарам браузъра да върши работата по анализирането, за да мога просто да гледам DOM. Това също ще ми позволи да получа CSS атрибути на тагове. Визуален дисплей би бил хубав, тъй като бих могъл да маркирам елементи или да оставя използването да задържи курсора на мишката върху тях, за да получа информация. Но търся всички плюсове и минуси, така че вашето мнение е полезно. - person Nosredna; 28.05.2009
comment
Освен това анализирането на тага на мета генератора ще получи CMS за поне няколко от тях. - person Rich Bradshaw; 31.05.2009

Мисля, че написването на разширение към Firebug вероятно ще бъде един от най-лесните начини за това. Например YSlow е разработен върху Firebug и предоставя някои от функциите, които търсите за (напр. изображения, CSS и резюмета на Javascript).

person Yrlec    schedule 31.05.2009
comment
YSlow определено е правилният начин, както каза Карл. Въпреки това бих казал, че YSlow предоставя всички функции, които поискате, включително отчети. Не забравяйте да проверите групата за изключителна производителност, която обсъжда YSlow и производителността като цяло: tech. groups.yahoo.com/group/exceptional-performance - person David Lantner; 04.06.2009
comment
Добре, с изключение на отгатването на CMS / рамката, която сайтът използва. :) - person David Lantner; 04.06.2009

Предлагам ви първо да опитате опция #4 (YQL): Причината е, че изглежда, че това може да ви осигури всички необходими данни и след това можете да създадете своя инструмент като уебсайт или такъв, където можете да получите информация за сайт, без всъщност трябва да отидете на страницата във вашия браузър. Ако YQL работи за това, от което се нуждаете, тогава изглежда, че ще имате най-голяма гъвкавост с тази опция.

Ако YQL не успее, тогава ви предлагам да изберете опция №2 (добавка за firefox).

Мисля, че вероятно трябва да опитате и да стоите далеч от Вариант №1 (iframe) поради проблемите със скриптовете между сайтове, за които вече знаете.

Освен това използвах опция #3 (вземане на сайта от страна на сървъра) и един проблем, с който се сблъсквах в миналото, е, че сайтът се грабва, зареждайки съдържание след факта, използвайки AJAX извиквания. По това време не намерих добър начин да грабна пълното съдържание на страници, които използват AJAX - ТАКА ЧЕ ВНИМАВАЙТЕ С ТОВА ПРЕПЯТСТВИЕ! Други хора тук също са се сблъсквали с това, вижте това: Изтриване на динамичен уебсайт

ПРОПРОМЪТ С ДИНАМИЧНОТО СЪДЪРЖАНИЕ НА AJAX: Може да има някои решения на проблема с ajax, като например използването на самия AJAX за извличане на съдържанието и използването на параметъра evalScripts:true. Вижте следните статии за повече информация и проблем, за който може да се наложи да знаете как работи оцененият javascript от съдържанието, което се грабва:

Библиотека с прототипи: http://www.prototypejs.org/api/ajax/updater

Табло за съобщения: http://www.crackajax.net/forums/index.php?action=vthread&forum=3&topic=17

Или ако сте готови да похарчите пари, погледнете това: http://aptana.com/jaxer/guide/develop_sandbox.html

Ето един грозен (но може би полезен) пример за използване на .NET компонент, наречен WebRobot, за премахване на съдържание от динамичен AJAX активиран сайт като Digg.com. http://www.vbdotnetheaven.com/UploadFile/fsjr/ajaxwebscraping09072006000229AM/ajaxwebscraping.aspx

Тук също има обща статия за използването на PHP и библиотеката Curl за премахване на всички връзки от уеб страница. Не съм сигурен обаче дали тази статия и библиотеката Curl покриват проблема със съдържанието на AJAX: http://www.merchantos.com/makebeta/php/scraping-links-with-php/

Едно нещо, за което току-що си помислих, че може да работи е:

  1. вземете съдържанието и го оценете с помощта на AJAX.
  2. изпратете съдържанието на вашия сървър.
  3. оценете страницата, връзките и т.н.
  4. [НЕЗАДЪЛЖИТЕЛНО] запазете съдържанието като локална страница на вашия сървър.
  5. върнете статистическата информация обратно на страницата.
  6. [НЕЗАДЪЛЖИТЕЛНО] показване на кеширана локална версия с подчертаване.

^Забележка: Ако запазвате локална версия, ще искате да използвате регулярни изрази, за да преобразувате пътищата на относителните връзки (особено за изображения), за да бъдат правилни.

Късмет! Моля, обърнете внимание на проблема с AJAX. Много сайтове в днешно време зареждат съдържание динамично с помощта на AJAX. Digg.com прави, MSN.com прави за своите новинарски емисии и т.н.

person Joe Bubna    schedule 05.06.2009

Тъй като съм предимно .Net програмист в наши дни, моят съвет би бил да използвате C# или някакъв друг език с .Net обвързвания. Използвайте контролата WebBrowser, за да заредите страницата и след това преминете през елементите в документа (чрез GetElementsByTagName()), за да получите връзки, изображения и т.н. С малко допълнителна работа (разбор на маркера BASE, ако е наличен), можете да преобразувате src и href атрибутите в URL адреси и да използвате HttpWebRequest за изпращане на HEAD заявки за целевите изображения за определяне на техните размери. Това би трябвало да ви даде представа колко графично интензивна е страницата, ако това е нещо, което ви интересува. Допълнителни елементи, които може да ви е интересно да включите във вашите статистики, могат да включват обратни връзки / Pagerank (чрез Google API), независимо дали страницата валидира като HTML или XHTML, какъв процент от връзките водят към URL адреси в същия домейн в сравнение с тези извън сайта и, ако възможно, класиране в Google за страницата за различни низове за търсене (не знам дали това е програмно достъпно обаче).

person Dathan    schedule 05.06.2009

Бих използвал скрипт (или компилирано приложение в зависимост от избрания език), написан на език, който има силна поддръжка за работа в мрежа и анализ на текст/регулярни изрази.

  • Perl
  • Python
  • .NET език по избор
  • Java

независимо от езика, с който се чувствате най-комфортно. Основен самостоятелен скрипт/приложение ви предпазва от необходимостта да се тревожите твърде много за интегрирането на браузъра и проблемите със сигурността.

person James Conigliaro    schedule 05.06.2009