Cum să scrapeți paginile Web pentru metadate

Ce veți crea

Introducere

Recent am inceput sa construiesc un site comunitar pe partea de sus a platformei Yii, pe care o voi scrie in curand ca parte a programului meu de programare cu Yii2. Am vrut să fac ușor adăugarea de linkuri legate de conținut pe site. Deși este ușor pentru utilizatori să insereze adrese URL în formulare, devine din ce în ce mai dificil să se furnizeze informații despre titlu și sursă.

În tutorialul de astăzi, vă voi arăta cum să folosiți PHP pentru a scana metadatele comune de pe paginile web pentru a ușura participarea utilizatorilor și pentru a construi mai multe servicii interesante.

Rețineți că particip la comentariile de mai jos, deci spuneți-mi ce credeți! Puteți să mă contactați și pe Twitter @lookahead_io. 

Noțiuni de bază

În primul rând, am construit un formular pentru ca oamenii să poată adăuga linkuri prin inserarea adresei URL. Am creat și o Privește în sus pentru a utiliza AJAX pentru a solicita ca pagina web să fie dezlegată pentru informații despre metadate.

Presare Privește în sus cheamă Link :: apuca () funcție prin ajax:

$ (document) .on ("click", "[id = lookup"], functie (eveniment) $. date: url: $ ('# url') val (), succes: functie (date) $ ('titlu'). 

Ștergerea paginii

Link :: apuca () apeluri de cod fetch_og (). Aceasta imite un crawler pentru a capta pagina și a obține metadatele cu DOMXPath:

funcția publică statică fetch_og ($ url) $ opțiuni = array ('http' => array ('user_agent' => 'facebookexternalhit / 1.1')); $ context = flux_context_create (opțiuni $); $ data = file_get_contents ($ url, false, $ context); $ dom = nou \ DomDocument; @ $ Dom-> loadHTML (date $); $ xpath = new \ DOMXPath ($ dom); # metatagii de interogare cu prefixul $ metas = $ xpath-> ('// * / meta [start-with (@property, \' og: \ ')]'); $ og = array (); foreach ($ metas ca $ meta) # obține proprietatea nume fără og: prefix $ property = str_replace ('og:', '$ meta-> getAttribute (' proprietate ')) $ content = $ meta-> getAttribute 'content'); $ og [$ property] = $ content; retur $ og;

Pentru scenariul meu, am înlocuit-o og: tag-urile de mai sus, dar codul de mai jos caută diferite tipuri de etichete:

$ tags = Link :: fetch_og ($ url); dacă (isset ($ tags ['title'])) $ title = $ tags ['titlu'];  altfel dacă (isset ($ tags ['metaProperties'] ['og: title'] ['valoare'])) $ title = $ tags ['metaProperties'] ['og: title'] ['value'] ;  altceva $ title = 'n / a';  return $ title; 

Puteți, de asemenea, să apucați alte etichete, cum ar fi cuvinte cheie, descriere etc. JQuery adaugă apoi rezultatul la formularul pe care utilizatorul îl poate trimite:

Mergând mai departe

De asemenea, am un tabel de surse pe care o voi dezvolta mai târziu. Dar, de regulă, de fiecare dată când se adaugă o nouă adresă URL, îl analizăm pentru domeniul site-ului de bază și îl plasăm într-un Sursă masa:

$ model-> source_id = Sursa :: add ($ model-> url); ... funcția statică publică adăugă ($ url = ", $ name =") $ source_url = parse_url ($ url); $ url = $ sursă_url ['gazdă']; $ url = trim ($ url, '\\'); $ s = Sursă :: find () -> unde (['url' => $ url]) -> one (); dacă (is_null ($ s)) $ s = sursă nouă; $ s-> url = $ url; $ s-> nume = $ nume; $ s-> status = Sursă :: STATUS_ACTIVE; $ S> Salvați ();  altceva if ($ s-> nume == ") $ s-> name = $ name; $ s-> update (); return $ s-> id;

Pentru moment, mă actualizez manual numele surselor, astfel încât acestea să pară curate pentru utilizatori, de ex. ABC News, BoingBoing, și Viciu:

Sperăm că într-un episod viitoare vom examina modul de utilizare a API-urilor disponibile în mod gratuit pentru a căuta numele site-ului. Este ciudat pentru mine că nu există metatag comun pentru asta; dacă numai Internetul a fost perfect.

Site-uri Paywall

Unele site-uri precum The New York Times nu vă permit să vă răsturnați metadatele datorită plăților lor de plăți. Dar au un API. Nu este ușor de învățat din cauza documentației confuze, dar dezvoltatorii lor sunt gata să ajute GitHub. De asemenea, sper să scriu despre utilizarea căutării metadatelor pentru titlurile New York Times într-un viitor episod.

În încheiere

Sper că ați găsit acest ghid de răzuire util și ați pus-o să se folosească undeva în proiectele dvs. Dacă doriți să îl vedeți în acțiune, puteți încerca câteva dintre paginile de pe site-ul meu, Active Together.

Vă rugăm să împărtășiți orice gânduri și feedback în comentarii. De asemenea, puteți să mă contactați direct pe Twitter @lookahead_io direct. Și asigurați-vă că pentru a verifica pagina mea de instructor și alte serii mele, construirea dvs. de pornire cu PHP și de programare cu Yii2.

Link-uri conexe

  • Cum să scrapeți paginile Web cu Node.js și jQuery (Envato Tuts +)
  • Tag-uri Meta și SEO (Envato Tuts +)
  • Actualizarea serverului dvs. Linux la PHP 7 (Envato Tuts +)
Cod