bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


webscraping_apache

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
webscraping_apache [2022/07/05 18:44]
josefina_llaberia
webscraping_apache [2022/08/01 07:05] (actual)
lidia_alos [Eines de scraping per a Python]
Línia 321: Línia 321:
  
 \\ \\
 +
 +===== Limitacions tècniques del web scraping =====
 +
 +Per als operadors de les pàgines web sol ser **avantatjós limitar les possibilitats de scraping automàtic en el seu contingut en línia**. D'una banda, perquè l'accés massiu a la web que fan els scrapers pot perjudicar el rendiment del lloc i, de l'altra, perquè hi sol haver seccions internes de la web que no s'haurien de mostrar als resultats de cerca.
 +
 +Per limitar l'accés als scrapers, s'ha estès l'ús de [[https://www.ionos.es/digitalguide/hosting/cuestiones-tecnicas/gestiona-la-indexacion-de-tu-sitio-con-robotstxt/|robots.txt]] estàndard. Es tracta d'un fitxer de text que els operadors web ubiquen al directori principal de la pàgina web. Hi ha entrades especials que estableixen **quins scrapers o bots estan autoritzats a accedir a quines àrees de la web**. Les entrades del fitxer robots.txt sempre s'apliquen a un domini sencer.
 +
 +A continuació, mostrem un exemple del contingut d'un fitxer robots.txt que prohibeix l'scraping mitjançant qualsevol tipus de bot a tot el lloc:
 +
 +Comandes:
 +  # Qualsevol bot
 +  User-agent: *
 +  # Excloure tot el directori principal
 +  Disallow: /
 +
 +
 +El fitxer robots.txt només actua com a mesura de seguretat ja que convida a una limitació voluntària per part dels bots, que s'haurien d'adherir a les prohibicions del fitxer. A nivell tècnic, però, no suposa cap obstacle. Per això, **per controlar de manera efectiva l'accés mitjançant web scrapers, els operadors web implementen també tècniques més agressives**. Una és, per exemple, limitar-ne el rendiment; una altra és bloquejar l'adreça IP de l'scraper després de diversos intents d'accés que infringeixin les normes de la web.
 +
 +===== Les API com a alternativa al web scraping =====
 +
 +Tot i la seva efectivitat, el web scraping no és el millor mètode per obtenir dades de pàgines web. De fet, sovint hi ha una alternativa millor: molts operadors web posen publiquen les dades de forma estructurada i en un format llegible per a les màquines. Per accedir a aquest tipus de dades es fan servir interfícies de programació especials anomenades [[https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/application-programming-interface-api/|Application Programming Interfaces]] (interfícies de programació d'aplicacions, API per les sigles en anglès).
 +
 +L'ús d'una API ofereix avantatges importants:
 +
 +  * **El propietari de la web crea l'API precisament per permetre accedir a les dades**. D'aquesta manera, es redueix el risc d'infraccions i l'operador web pot regular millor l'accés a les dades. Una manera de fer-ho és, per exemple, sol·licitant una clau API per accedir-hi. Aquest mètode també permet a l'operador regular de manera més precisa les limitacions del rendiment.
 +  * **L'API presenta dades directament en un format llegible per a les màquines**. Amb això, ja no cal la tasca laboriosa d'extreure les dades del text font. A més, l'estructura de les dades se separa de la representació visual, per la qual cosa es manté sense importar si canvia el disseny de la web.
 +
 +Sempre que hi hagi una API disponible i que ofereixi dades completes, aquest serà **el millor mètode per accedir a la informació**, sense oblidar que mitjançant el web scraping es poden extreure, en principi, tots els textos que una persona podria llegir en una pàgina web.
 +
 +===== Eines de scraping per a Python =====
 +
 +L'ecosistema Python inclou diverses eines consolidades per realitzar projectes de scraping:
 +  * Scrapy
 +  * Selenium
 +  * BeautifulSoup
 +
 +A continuació, us presentem els avantatges i inconvenients de cadascuna d'aquestes tecnologies.
 +
 +**Web scraping amb Scrapy**
 +
 +Scrapy, una de les eines per fer web scraping amb Python que presentem, utilitza un analitzador sintàctic o **parser HTML** per extreure dades del text font (en HTML) de la web seguint aquest esquema:
 +
 +  URL → Solicitud HTTP → HTML → Scrapy
 +  
 +El concepte clau del desenvolupament de scrapers amb Scrapy són els anomenats web spiders, programes de scraping senzills i basats en Scrapy. **Cada spider (aranya) està programat per scrapejar una web concreta** i es va despenjant de pàgina a pàgina. La programació utilitzada està orientada a objectes: cada spider és una classe de Python pròpia.
 +
 +A més del paquet de Python en si, la instal·lació de Scrapy inclou una eina de línia d'ordres, la Scrapy Shell, que permet controlar els spiders. A més, els spiders ja creats poden emmagatzemar-se a la [[https://www.scrapinghub.com/scrapy-cloud|Scrapy Cloud]]. Des d'allà s'executen amb temps establerts. D'aquesta manera **poden scrapejar-se també llocs web complexos** sense necessitat d'utilitzar el mateix ordinador ni la pròpia connexió a Internet. Una altra manera de fer-ho és crear un servidor de web scraping propi usant el programari de codi obert [[https://scrapyd.readthedocs.io/en/stable/|Scrapyd]].
 +
 +Scrapy és una plataforma consolidada per aplicar tècniques de web scraping amb Python. La seva arquitectura està **orientada a les necessitats de projectes professionals**. Scrapy compta, per exemple, amb una canonada o pipeline integrada per processar les dades extretes. L'obertura de les pàgines a Scrapy es produeix de manera asíncrona, és a dir, amb la possibilitat de descarregar diverses pàgines simultàniament. Per això, Scrapy és una bona opció per a projectes de scraping que hagin de processar grans volums de pàgines.
 +
 +**Web scraping amb Selenium**
 +
 +El programari lliure Selenium és un //framework// per realitzar tests automatitzats de programari a aplicacions web. En principi, **va ser desenvolupat per posar a prova pàgines i apps web**, però el [[https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/tutorial-de-selenium-webdriver/|WebDriver]] de Selenium també es pot fer servir amb Python per realitzar //scraping//. Si bé Selenium en si no està escrit a Python, amb aquest llenguatge de programació és possible accedir a les funcions del programari.
 +
 +A diferència de Scrapy i BeautifulSoup, Selenium no treballa amb el text font en HTML de la web en qüestió, sinó que **carrega la pàgina en un navegador sense interfície d'usuari**. El navegador interpreta llavors el codi font de la pàgina i crea, a partir d'aquest document, un [[https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/presentacion-de-document-object-model-dom/|Document Object Model]] (model d'objectes de document o DOM). Aquesta interfície estandarditzada permet posar a prova les interaccions dels usuaris. D'aquesta manera s'aconsegueix, per exemple, simular clics i emplenar formularis automàticament. Els canvis a la web que resulten d'aquestes accions es reflecteixen al DOM. L'estructura del procés de web scraping amb Selenium és la següent:
 +
 +  URL → Sol·licitud HTTP → HTML → Selenium → DOM
 +
 +Com que el DOM es genera de manera dinàmica, Selenium permet **scrapejar també pàgines el contingut de les quals ha estat generat mitjançant JavaScript**. L´accés a continguts dinàmics és l´avantatge més important de Selenium. En termes pràctics, Selenium també es pot fer servir en combinació amb Scrapy o amb BeautifulSoup: Selenium proporcionaria el text font, mentre que la segona eina s'encarregaria de l'anàlisi sintàctica i l'avaluació de les dades. En aquest cas, l'esquema que se seguiria tindria aquesta manera:
 +
 +  URL → Sol·licitud HTTP → HTML → Selenium → DOM → HTML → Scrapy / BeautifulSoup
 +
 +**Web scraping amb BeautifulSoup**
 +
 +De les tres eines que presentem **per fer web scraping amb Python, BeautifulSoup és la més antiga**. Igual que en el cas de Scrapy, es tracta d'un parser o analitzador sintàctic HTML. El web scraping amb BeautifulSoup té la següent estructura:
 +
 +  URL → Sol·licitud HTTP → HTML → BeautifulSoup
 +
 +Tot i això, a diferència de Scrapy, a BeautifulSoup el desenvolupament de l'scraper no requereix una programació orientada a objectes, sinó que **l'scraper es redacta com una senzilla seqüència d'ordres o script**. Amb això, BeautifulSoup ofereix el mètode més fàcil per pescar informació de la sopa de tags a què fa honor el seu nom.
 +
 +<WRAP center round important 100%>
 +===== En resum =====
 +**Quina eina hauries de triar pel teu projecte?** En resum: escull **BeautifulSoup** si necessites un desenvolupament ràpid o si vols familiaritzar-te primer amb els conceptes de Python i de web scraping. **Scrapy**, per la seva banda, et permet realitzar complexes aplicacions de web scraping a Python si disposes dels coneixements necessaris. **Selenium** serà la teva millor opció si la teva prioritat és extreure continguts dinàmics amb Python.
 +</WRAP>
  
webscraping_apache.1657046688.txt.gz · Darrera modificació: 2022/07/05 18:44 per josefina_llaberia