Tutorial: Go Spider! Web Scraping cu Python și Scrapy

(Schwinn Zhang) (19 ianuarie 2019)

sursa imaginii: https://myfigurecollection.net/item/736413

Probabil am auzit de „web scraping”. Dacă nu ați făcut-o, web scraping înseamnă utilizarea unui algoritm computerizat pentru a obține informații țintă de pe un site web. Biblioteca Python Scrapy a fost construită exact pentru această sarcină. Supa frumoasă este o altă opțiune, dar este LENTĂ. Oricum, doriți să luați această abilitate pentru construirea de software, pentru știința datelor sau pentru Kremlin (cu ochiul). Există o mulțime de tutoriale despre acest subiect. „De unde încep?” „Există o foaie de parcurs pentru asta?” După ce am petrecut trei zile examinând informații bune, rele și învechite, sunt aici pentru a vă oferi această foaie de parcurs de web scraping.

De unde să începeți

Planul meu era să urmez proiectele python din această listă . Dacă ați decis să începeți cu Twitter Mining , atunci BUN SUC (sarcastic) pentru că încă aștept pe Twitter să-mi acordați acces la API-ul lor după 5 zile 17 ore și 7 minute. Așadar, alertă restante! Bineînțeles, am trecut la următorul: Scrape un site web cu Python (și MongoDB) . Am pus MongoDB între paranteze pentru simplitate. MongoDB va costa mult timp și pentru micul meu program, nici măcar nu este necesar. Aș prefera să fac să funcționeze un screper web total python și apoi să adaug funcționalitatea MongoDB mai târziu. Gestionarea timpului înseamnă tăierea declanșărilor și accesul la bază. Software Dev 101. Oricum, urmați acest articol Scrape un site web cu Python (și MongoDB) și veți avea o idee de bază despre modul în care funcționează web scraping.

XPath vs CSS? Aleg CSS

Apoi am rămas blocat pe ceva numit XPath, practic, o instrucțiune bazată pe URL care indică informații țintă către păianjenul nostru cercetaș. După o navigare tutorial extinsă, am găsit acest joc alimentar care vă ajută să învățați și să exersați scrierea XPath. Dacă totuși vă temeți de XPath, există un alt mod, pe care articolul de tutorial nu l-a menționat …

De la Scrapy tutorial în documentația sa, am găsit prieten CSS, care are o sintaxă simplă și mai simplă. De fapt, documentația Scrapy este cel mai bun tutorial. Este cel mai actualizat, mai detaliat și multe tutoriale de blog se bazează pe acest lucru. În acest tutorial, am găsit cea mai bună modalitate de a practica informațiile web care vizează prin shell-ul IPython al Scrapy, practic un notebook Jupyter de pe terminal. În linia de comandă, utilizați

scrapy shell [url între ghilimele]

Apoi, urmați tutorialul Scrapy de pe quotes.toscrape.com. Este un exemplu ideal, deoarece site-ul web este simplu, cu foarte puține straturi de CSS încorporat. După câteva runde, ești deja un ninja răzuitor junior. În acest moment, m-am simțit suficient de încrezător încât să scot toate titlurile de pe prima pagină a New York Times . Iată, a fost o sarcină imposibilă în acest moment, deoarece prima pagină are o cantitate impresionantă de încorporare. Ei bine, prima pagină este doar o combinație curată de articole din fiecare secțiune, nu? Urmând această logică, am putut merge la secțiunea Op-Ed mai simplă și la secțiunea Art pentru a zgâria cu succes toate titlurile. Iată repo pe git.

Deci, iată-l pe primul meu păianjen. Va trebui să construiesc mai multe funcții și caracteristici. Dar deocamdată funcționează. Puteți vedea toate titlurile de pe pagina NYT Op-Ed care au fost stocate într-un fișier json aici. Iată o captură de ecran. Puteți găsi duplicate aici. E bine. Putem construi un detector duplicat după aceea. De asemenea, intenționez să scot din mai multe surse de știri și să plasez rezultatele în același fișier.

NYT Rezultatele OpEdTitles Scraper. Sursă: Schwinn Zhang

Rezumatul algoritmului păianjen

Pașii următori

  1. Depanare și / sau adăugare de funcționalități păianjenului dvs.
  2. Încercați pentru a răzuia un set de date. Iată un tutorial bun: Utilizarea Scrapy pentru a vă crea propriul set de date .

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *