Kā izveidot pamata tīmekļa rāpuļprogrammu, lai iegūtu informāciju no vietnes

Kā izveidot pamata tīmekļa rāpuļprogrammu, lai iegūtu informāciju no vietnes

Programmām, kas lasa informāciju no vietnēm vai tīmekļa rāpuļprogrammām, ir visu veidu noderīgas lietojumprogrammas. Jūs varat meklēt informāciju par akcijām, sporta rezultātiem, tekstu no Twitter konta vai izvilkt cenas no iepirkšanās vietnēm.





Šo tīmekļa pārmeklēšanas programmu rakstīšana ir vieglāka, nekā jūs domājat. Python ir lieliska bibliotēka skriptu rakstīšanai, kas iegūst informāciju no vietnēm. Apskatīsim, kā izveidot tīmekļa rāpuļprogrammu, izmantojot Scrapy.





Scrap instalēšana

Scrapija ir Python bibliotēka, kas tika izveidota, lai nokasītu tīmekli un izveidotu tīmekļa rāpuļprogrammas. Tas ir ātrs, vienkāršs un var pārvietoties pa vairākām tīmekļa lapām bez lielām pūlēm.





Metāllūžņi ir pieejami, izmantojot bibliotēku Pip Installs Python (PIP). Šeit ir atsvaidzināšana kā instalēt PIP operētājsistēmā Windows, Mac un Linux .

Vēlams izmantot Python virtuālo vidi, jo tā ļaus jums instalēt Scrapy virtuālā direktorijā, kas atstāj jūsu sistēmas failus atsevišķi. Scrapy dokumentācija iesaka to darīt, lai iegūtu vislabākos rezultātus.



Izveidojiet direktoriju un inicializējiet virtuālo vidi.

kā atpazīt dziesmu no videoklipa
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Tagad jūs varat instalēt Scrapy šajā direktorijā, izmantojot PIP komandu.





pip install scrapy

Ātra pārbaude, lai pārliecinātos, vai Scrapy ir pareizi instalēta

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)
...

Kā izveidot tīmekļa rāpuļprogrammu

Tagad, kad vide ir gatava, varat sākt veidot tīmekļa rāpuļprogrammu. Izņemsim informāciju no akumulatora Vikipēdijas lapas: https://en.wikipedia.org/wiki/Battery_(electricity) .





Pirmais rāpuļprogrammas rakstīšanas solis ir Python klases definēšana, kas stiepjas no Scrap.Zirneklis . Tas ļauj piekļūt visām Scrapy funkcijām un funkcijām. Sauksim šo klasi zirneklis 1 .

Zirnekļu klasei ir nepieciešami daži dati:

  • uz vārds zirnekļa identificēšanai
  • uz start_urls mainīgais, kas satur to URL sarakstu, no kuriem pārmeklēt (šajā apmācībā piemērs būs Vikipēdijas URL)
  • uz parsēt () metode, kas tiek izmantota tīmekļa lapas apstrādei, lai iegūtu informāciju
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Ātrs tests, lai pārliecinātos, ka viss darbojas pareizi.

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',
...

Reģistrēšanas izslēgšana

Running Scrapy ar šo klasi izdrukā žurnāla informāciju, kas jums šobrīd nepalīdzēs. Padarīsim to vienkāršu, noņemot šo lieko žurnāla informāciju. Lieto brīdinājums paziņojumu, pievienojot faila sākumam kodu.

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

Tagad, palaižot skriptu vēlreiz, žurnāla informācija netiks izdrukāta.

Izmantojot Chrome inspektoru

Viss tīmekļa lapā tiek saglabāts HTML elementos. Elementi ir sakārtoti dokumenta objekta modelī (DOM). Lai gūtu maksimālu labumu no tīmekļa rāpuļprogrammas, ir svarīgi izprast DOM. Tīmekļa rāpuļprogramma meklē visus lapas HTML elementus, lai atrastu informāciju, tāpēc ir svarīgi zināt, kā tie ir sakārtoti.

Pārlūkprogrammā Google Chrome ir rīki, kas palīdz ātrāk atrast HTML elementus. Izmantojot inspektoru, varat atrast jebkura tīmekļa lapā redzamā elementa HTML.

  • Pārvietojieties uz lapu pārlūkā Chrome
  • Novietojiet peli uz elementa, kuru vēlaties apskatīt
  • Ar peles labo pogu noklikšķiniet un atlasiet Pārbaudīt no izvēlnes

Veicot šīs darbības, tiks atvērta izstrādātāja konsole ar Elementi cilne atlasīta. Konsoles apakšā redzēsit elementu koku. Šis koks ir veids, kā iegūt informāciju par savu skriptu.

Nosaukuma izvilkšana

Ļaujiet skriptam veikt kādu darbu mūsu vietā; Vienkārša pārmeklēšana, lai iegūtu tīmekļa lapas virsraksta tekstu.

Sāciet skriptu, pievienojot kodam parsēt () metode, kas izraksta nosaukumu.

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

The atbilde arguments atbalsta metodi, ko sauc CSS () kas atlasa lapas elementus, izmantojot jūsu norādīto atrašanās vietu.

Šajā piemērā elements ir h1.firstHeading . Pievienošana

::text

skripts nodrošina elementa teksta saturu. Visbeidzot, ekstrakts() metode atgriež atlasīto elementu.

Palaižot šo skriptu Scrapy, nosaukums tiek izdrukāts teksta formā.

[u'Battery (electricity)']

Apraksta atrašana

Tagad, kad esam nokopējuši virsraksta tekstu, darīsim vairāk ar skriptu. Rāpuļprogramma atradīs pirmo rindkopu aiz virsraksta un iegūs šo informāciju.

Šeit ir elementu koks Chrome izstrādātāja konsolē:

kā lasīt Mac disku operētājsistēmā Windows
div#mw-content-text>div>p

Labā bultiņa (>) norāda vecāku un bērnu attiecības starp elementiem.

Šī atrašanās vieta atgriezīs visus lpp elementi atbilst, kas ietver visu aprakstu. Lai iegūtu pirmo lpp elements, kuru varat uzrakstīt:

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

Tāpat kā virsraksts, jūs pievienojat CSS nosūcēju

::text

lai iegūtu elementa teksta saturu.

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

Galīgā izteiksme tiek izmantota ekstrakts() lai atgrieztos sarakstā. Jūs varat izmantot Python pievienoties () funkciju, lai pievienotos sarakstam, kad visa pārmeklēšana ir pabeigta.

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

Rezultāts ir teksta pirmā rindkopa!

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
...

JSON datu vākšana

Scrapy var iegūt informāciju teksta formā, kas ir noderīgi. Scrapy arī ļauj skatīt datu JavaScript objekta apzīmējumu (JSON). JSON ir veikls informācijas sakārtošanas veids, un to plaši izmanto tīmekļa izstrādē. JSON diezgan labi darbojas ar Python arī.

Ja jums jāapkopo dati kā JSON, varat izmantot raža Scrapijā iebūvētais paziņojums.

Šeit ir jauna skripta versija, izmantojot peļņas paziņojumu. Tā vietā, lai iegūtu pirmo p elementu teksta formātā, tas paņems visus p elementus un sakārtos to JSON formātā.

vai man vajadzētu izslēgt Windows Defender
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Tagad varat palaist zirnekli, norādot izejas JSON failu:

scrapy runspider spider3.py -o joe.json

Skripts tagad izdrukās visus p elementus.

[
{'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
...

Vairāku elementu nokasīšana

Līdz šim tīmekļa pārmeklētājs no lapas ir nokopējis virsrakstu un viena veida elementu. Scrapy var arī iegūt informāciju no dažāda veida elementiem vienā skriptā.

Izņemsim populārākos IMDb kases hitus nedēļas nogalei. Šī informācija tiek ņemta no http://www.imdb.com/chart/boxoffice , tabulā ar rindām katrai metrikai.

The parsēt () metode no rindas var iegūt vairāk nekā vienu lauku. Izmantojot Chrome izstrādātāju rīkus, varat atrast tabulā ievietotos elementus.

...
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(),
}
...

The attēlu atlasītājs to norāda img ir pēcnācējs td.posterColumn . Lai iegūtu pareizo atribūtu, izmantojiet izteiksmi | _+_ |.

Skrienot zirnekli, tiek atgriezts JSON:

::attr(src)

Vairāk tīmekļa skrāpju un robotu

Scrapy ir detalizēta bibliotēka, kas var veikt gandrīz jebkura veida tīmekļa pārmeklēšanu, ja to lūdzat. Runājot par informācijas atrašanu HTML elementos kopā ar Python atbalstu, to ir grūti pārspēt. Neatkarīgi no tā, vai veidojat tīmekļa rāpuļprogrammu vai apgūstat tīmekļa skrāpēšanas pamatus, vienīgais ierobežojums ir tas, cik daudz esat gatavs apgūt.

Ja meklējat vairāk veidu, kā izveidot rāpuļprogrammas vai robotus, varat mēģināt veidot Twitter un Instagram robotus, izmantojot Python . Python var izveidot dažas pārsteidzošas lietas tīmekļa izstrādē, tāpēc, pētot šo valodu, ir vērts pārsniegt tīmekļa rāpuļprogrammas.

Kopīgot Kopīgot Čivināt E -pasts 15 Windows komandrindas (CMD) komandas, kas jums jāzina

Komandu uzvedne joprojām ir spēcīgs Windows rīks. Šeit ir visnoderīgākās CMD komandas, kas jāzina katram Windows lietotājam.

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • Tīmekļa pārziņa rīki
  • Programmēšana
  • Python
  • Kodēšanas apmācības
  • Tīmekļa rāpuļprogrammas
Par autoru Entonijs Grants(40 publicēti raksti)

Entonijs Grants ir ārštata rakstnieks, kas aptver programmēšanu un programmatūru. Viņš ir datorzinātņu profesors, kurš nodarbojas ar programmēšanu, Excel, programmatūru un tehnoloģijām.

Vairāk no Entonija Granta

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu