Com es pot crear un rastrejador web bàsic per extreure informació d’un lloc web

Com es pot crear un rastrejador web bàsic per extreure informació d’un lloc web

Els programes que llegeixen informació de llocs web o rastrejadors web tenen tot tipus d’aplicacions útils. Podeu obtenir informació sobre accions, puntuacions esportives, text des d’un compte de Twitter o obtenir preus dels llocs web de compres.





Escriure aquests programes de rastreig web és més fàcil del que es podria pensar. Python té una biblioteca fantàstica per escriure scripts que extreuen informació de llocs web. Vegem com crear un rastrejador web amb Scrapy.





Instal·lació de Scrapy

Scrapy és una biblioteca Python que es va crear per rascar el web i construir rastrejadors web. És ràpid, senzill i pot navegar per diverses pàgines web sense gaire esforç.





Scrapy està disponible a la biblioteca Pip Installs Python (PIP), aquí teniu una actualització com instal·lar PIP a Windows, Mac i Linux .

Es prefereix utilitzar un entorn virtual Python perquè us permetrà instal·lar Scrapy en un directori virtual que deixi els fitxers del sistema en pau. La documentació de Scrapy recomana fer-ho per obtenir els millors resultats.



Creeu un directori i inicialitzeu un entorn virtual.

com executar Mac a Windows
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Ara podeu instal·lar Scrapy en aquest directori mitjançant una ordre PIP.





pip install scrapy

Una comprovació ràpida per assegurar-vos que Scrapy està instal·lat correctament

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Com es crea un rastrejador web

Ara que l'entorn està a punt, podeu començar a construir el rastrejador web. Rasquem informació sobre bateries d’una pàgina de Viquipèdia: https://en.wikipedia.org/wiki/Battery_(electricity) .





El primer pas per escriure un rastrejador és definir una classe Python que s’estén des de Scrapy.Aranya . Això us permet accedir a totes les funcions i funcions de Scrapy. Anomenem aquesta classe aranya1 .

Una classe d’aranyes necessita algunes dades:

  • a nom per identificar l’aranya
  • a start_urls variable que conté una llista d'URL per rastrejar (l'URL de Viquipèdia serà l'exemple d'aquest tutorial)
  • a analitzar () mètode que s’utilitza per processar la pàgina web per extreure informació
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Una prova ràpida per assegurar-vos que tot funciona correctament.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Desactivació del registre

Si executeu Scrapy amb aquesta classe, s'imprimeix informació de registre que no us ajudarà en aquest moment. Per simplificar-ho, elimineu aquesta informació de registre sobrant. Utilitzeu un advertència sentència afegint codi al començament del fitxer.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Ara, quan torneu a executar l'script, la informació del registre no s'imprimirà.

Utilitzant Chrome Inspector

Tot en una pàgina web s’emmagatzema en elements HTML. Els elements es disposen al model d’objectes de document (DOM). La comprensió del DOM és fonamental per treure el màxim profit del vostre rastrejador web. Un rastrejador web cerca tots els elements HTML d’una pàgina per trobar informació, de manera que és important saber com s’organitzen.

Google Chrome té eines que us ajuden a trobar elements HTML més ràpidament. Podeu localitzar l’HTML de qualsevol element que vegeu a la pàgina web mitjançant l’inspector.

  • Aneu a una pàgina de Chrome
  • Col·loqueu el ratolí sobre l'element que voleu veure
  • Feu clic amb el botó dret i seleccioneu Inspeccioneu des del menú

Aquests passos obriran la consola per a desenvolupadors amb Elements pestanya seleccionada. A la part inferior de la consola, veureu un arbre d’elements. Aquest arbre és com obtindreu informació per al vostre script.

Extracció del títol

Aconseguim que el guió ens faci una mica de feina; Un simple rastreig per obtenir el text del títol de la pàgina web.

Inicieu l'script afegint algun codi al fitxer analitzar () mètode que extreu el títol.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

El resposta argument admet un mètode anomenat CSS () que selecciona elements de la pàgina mitjançant la ubicació que proporcioneu.

En aquest exemple, l'element és h1.principalCapçalament . Sumant

::text

a l'script és el que us proporciona el contingut de text de l'element. Finalment, el fitxer extract () torna l’element seleccionat.

L'execució d'aquest script a Scrapy imprimeix el títol en forma de text.

[u'Battery (electricity)']

Trobant la descripció

Ara que hem rascat el text del títol, fem més coses amb l'script. El rastrejador trobarà el primer paràgraf després del títol i extreurà aquesta informació.

A continuació, es mostra l’arbre d’elements de la Consola per a desenvolupadors de Chrome:

com augmentar nitro un servidor
div#mw-content-text>div>p

La fletxa dreta (>) indica una relació pare-fill entre els elements.

Aquesta ubicació retornarà tots els fitxers pàg elements coincidents, que inclou tota la descripció. Per aconseguir el primer pàg element que podeu escriure aquest codi:

response.css('div#mw-content-text>div>p')[0]

Igual que el títol, afegiu un extractor CSS

::text

per obtenir el contingut de text de l’element.

response.css('div#mw-content-text>div>p')[0].css('::text')

L’expressió final s’utilitza extract () per tornar la llista. Podeu utilitzar Python unir-se () funció per unir-se a la llista un cop finalitzat tot el rastreig.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

El resultat és el primer paràgraf del text.

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Recopilació de dades JSON

Scrapy pot extreure informació en forma de text, cosa que és útil. Scrapy també us permet visualitzar les dades JavaScript Object Notation (JSON). JSON és una manera ordenada d’organitzar la informació i s’utilitza àmpliament en el desenvolupament web. JSON funciona molt bé amb Python també.

Quan necessiteu recopilar dades com a JSON, podeu utilitzar el fitxer rendiment declaració integrada a Scrapy.

Aquí teniu una nova versió de l'script que utilitza una declaració de rendiment. En lloc d’obtenir el primer element p en format de text, agafarà tots els elements p i l’organitzarà en format JSON.

el wifi no té una adreça IP vàlida
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Ara podeu executar l'aranya especificant un fitxer JSON de sortida:

scrapy runspider spider3.py -o joe.json

Ara el guió imprimirà tots els elements p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Raspar diversos elements

Fins ara, el rastrejador web ha esborrat el títol i un tipus d’element de la pàgina. Scrapy també pot extreure informació de diferents tipus d'elements en un script.

Extreguem els millors èxits de taquilla IMDb per a un cap de setmana. Aquesta informació és extreta http://www.imdb.com/chart/boxoffice , en una taula amb files per a cada mètrica.

El analitzar () mètode pot extreure més d'un camp de la fila. Mitjançant les eines per a desenvolupadors de Chrome podeu trobar els elements imbricats a la taula.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

El imatge selector especifica que img és descendent de td.posterColumn . Per extreure l'atribut correcte, utilitzeu l'expressió ::attr(src).

L'execució de l'aranya retorna JSON:

[
{'gross': '.8M', 'weeks': '1', 'weekend': '.8M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Justice League'},
{'gross': '.5M', 'weeks': '1', 'weekend': '.5M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg', 'title': 'Wonder'},
{'gross': '7.3M', 'weeks': '3', 'weekend': '.7M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Thor: Ragnarok'},
...
]

Més rascadors i robots web

Scrapy és una biblioteca detallada que pot fer pràcticament qualsevol tipus de rastreig web que se li demani. Quan es tracta de trobar informació en elements HTML, combinat amb el suport de Python, és difícil de superar. Tant si esteu construint un rastrejador web com si coneixeu els conceptes bàsics de l’esborrat web, l’únic límit és el que esteu disposat a aprendre.

Si cerqueu més maneres de construir rastrejadors o robots, podeu provar-ho creeu bots de Twitter i Instagram mitjançant Python . Python pot crear coses increïbles en el desenvolupament web, de manera que val la pena anar més enllà dels rastrejadors web en explorar aquest idioma.

Compartir Compartir Tweet Correu electrònic 15 Ordres de l'indicador de comandes de Windows (CMD) que heu de conèixer

El símbol del sistema continua sent una potent eina de Windows. Aquests són els comandaments CMD més útils que tots els usuaris de Windows necessiten conèixer.

Llegiu a continuació
Temes relacionats
  • Programació
  • Eines per a administradors web
  • Programació
  • Python
  • Tutorials de codificació
  • Rastrejadors web
Sobre l'autor Anthony Grant(40 articles publicats)

Anthony Grant és un escriptor independent que cobreix programació i programari. És un especialista en informàtica dedicat a la programació, Excel, programari i tecnologia.

Més d'Anthony Grant

Subscriu-te al nostre butlletí

Uniu-vos al nostre butlletí per obtenir consells tècnics, ressenyes, llibres electrònics gratuïts i ofertes exclusives.

Feu clic aquí per subscriure-us