|
"Web scraping" (някъде се среща и термина "harvesting").
В този урок ще научите как да направите PHP скрипт, който извлича линккове от уеб страница. Какво ще научите: 1. Как да използвате cURL за да извлечете съдържанитето на уеб страница (URL). 2. Използване на PHP DOM (Document-Object-Model) функциите за разбор на HTML документа и изличане на хиперлинковете. 3. Използването на XPath за извличане на линкове от определени места в страниците. 4. Записване на събраната информация в MySQL база данни. 5. Обобщаване на събраната информация. 6. За какво и как да използвате тази информация. 7. Законно ли е използването на тази технология. Какво е небодимо преди да започнем
Извличане съдържанието на страница cURL е един от най-добрите начини да направим заявка към HTTP стъвър. Този механизъм имитира заявка от браузър по различни начини. Ето и примерен код: CODE
Ако заявката се обработи коректно, в променливата $html ще имаме съдържанието на страницата ($target_url). Ако не, ще получим съобщение за грешка. CODE
Тази линия определя адреса, към коойто ще бъде отправяна заявката. Например, ако желаете да извлечете съдържанието на страница, променливата $target_url би трябвало да има стойност във вида: $target_url = „http://www.merchantos.com/makebeta/”. За сега ще оставим другите опции, Но особено внимание изсисква параметърът „CURLOPT_USERAGENT” – вижте по-долу. Забележка: Задайте user agent. Това е важно! Много уеб страници не биха ви върнали коректен резултат, ако не сте подали user agent. Какво е "user agent" – Просто казано, браузъра, който ползвате. Това е стринг, записан във всяка една заявка към WEB –сървърите. Но освен посещения от браузъри, страниците се посещават и от автоматизирани програми – spiders. Сървърите реагират различно на различните клиенти. Някои сървъри връщатат различен резултат в зависимост от клиента. Може да експериментирате. Следващия пример имитира посещение от Google: CODE
Може да намерите списък на user agents на http://www.user-agents.org/index.shtml Общо взето има два вида user agents. Автоматичните търсачки и реалните посещения с браузър.Ето примери на двата вида user agents: Автоматични:
Потребителски – браузър:
Как да използваме нататък функциите на PHP за работа с получения документ PHP предлага мощни средсва за работа с обектно-структурирани докоменти, като XML и HTML (http://bg.php.net/dom). За краткост по-надолу ще ги наричаме DOM (Document Object Model) функции. И така, вече имаме HTML документ в променливата $html. Това обаче е стринг, който трябва да превърнем в обектна структура в паметта. Лесно е: CODE
Сега вече имаме обектно структурирани данни. Обектът $dom от клас DOMDocument ни дава възможност за обектно ориентиран достъп до тези данни. Забележка: Има много несдандратно кодирани сртаници. Понякога HTML парсера дава предупреждения или грешки. Поставянето на ‘@’ в началото на завката в loadHTML() в много случаи премахва проблема. Използването на XPath е лесен начин за извличане на хиперлинковете от HTML документ XPath ви дава възможност да извлечете възлите (или в случая – HTML тагове) от документа. Вижте как може да извлечете линковете в несортиран списък само с еднин от методите. Всичко, което трябва да направите е да напишете заявка от вида “/html/body//ul//li//a” и да я подадете на XPath->evaluate(). Тук няма да разглеждаме подробно всички начини на използване на класа XPath. Примери може да намерите на XPath Examples. Целта ни тук е да покажем начина на извличане на хиперлинкове от HTML документ. Ето фрагмент от код с който може да се извлекат линковете от страница: CODE
Сега да запишем резултата Първо прябва да направим цикъл, в който да извлечем хиперлинковете от доккумента и да ги запишем в таблица от база данни. Да започнем с цикъла: CODE
$hrefs е обект от клас DOMNodeList, а item() е метод, който връща определен DOM възел според подадения индекс.Индекса може да бъде между нула и $hrefs->length. Вече имаме цикъл, който извлича линковете във вид на DOM обект. Нас ни интересуват самите хиперлинкове. CODE
DOMNodes наследява метода getAttribute() от класа DOMElement. getAttribute() връща стойнотта на зададения атрибут. В нашия случай, това е „href” на елементите <а ...> в документа. Вече сме готови да запишем резултата. Естествено ни е необходима таблица в базата данни: CODE
Сега да напишем и storeLink(), която ще записва в базата данни извлечените линкове (подразбира се, че сте на ясно със свързвавето с база данни чрез PHP): CODE
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









