Näiteks kui soovite oma lemmiktooteid regulaarselt värskendada sooduspakkumiste jaoks või soovite automatiseerida oma lemmikhooaja episoodide allalaadimise protsessi ükshaaval ja veebisaidil pole selle jaoks ühtegi API-d, siis on ainus valik teile jääb veebi kraapimine.Veebikraapimine võib mõnel veebisaidil olla ebaseaduslik, olenevalt sellest, kas veebisait seda lubab või mitte. Veebisaidid kasutavad roboteid.txt ”fail, et määratleda selgesõnaliselt URL-id, mida pole lubatud tühistada. Robotite lisamisega saate kontrollida, kas veebisait lubab seda või mitte.txt ”koos veebisaidi domeeninimega. Näiteks https: // www.google.com / robotid.txt
Selles artiklis kasutame kraapimiseks Pythoni, kuna seda on väga lihtne seadistada ja kasutada. Sellel on palju sisseehitatud ja kolmandate osapoolte raamatukogusid, mida saab kasutada andmete kraapimiseks ja korrastamiseks. Veebilehe toomiseks kasutame kaht Pythoni teeki "urllib" ja programmeerimisoperatsioonide rakendamiseks veebilehe sõelumiseks "BeautifulSoup".
Kuidas veebi kraapimine töötab?
Saadame päringu veebilehele, kust soovite andmeid kraapida. Veebisait vastab päringule lehe HTML-sisuga. Seejärel saame selle veebilehe parsida BeautifulSoupi edasiseks töötlemiseks. Veebilehe toomiseks kasutame Pythonis teeki „urllib”.
Urllib laadib veebilehe sisu alla HTML-vormingus. Me ei saa sellele HTML-i veebisaidile sisu väljatõmbamiseks ja edasiseks töötlemiseks rakendada stringitoiminguid. Kasutame Pythoni teeki “BeautifulSoup”, mis sõelub sisu ja eraldab huvitavad andmed.
Artiklite kraapimine Linuxhintist.com
Nüüd, kui meil on ettekujutus veebi kraapimise toimimisest, teeme natuke harjutusi. Püüame kraapida artiklite pealkirju ja linke Linuxhintist.com. Nii et avage https: // linuxhint.com / teie brauseris.
Veebilehe HTML-lähtekoodi kuvamiseks vajutage nüüd klahve CRTL + U.
Kopeerige lähtekood ja minge saidile https: // htmlformatter.com / koodi täpsustamiseks. Pärast koodi täpsustamist on seda lihtne kontrollida ja leida huvitavat teavet.
Nüüd kopeerige uuesti vormindatud kood ja kleepige see oma lemmiktekstiredaktorisse, näiteks aatom, ülev tekst jne. Nüüd kraapime huvitava teabe Pythoni abil. Sisestage järgmine
// Paigaldage ilus supiraamatukogu, urllib tulebeelinstallitud Pythoni
ubuntu @ ubuntu: ~ $ sudo pip3 installib bs4
ubuntu @ ubuntu: ~ $ python3
Python 3.7.3 (vaikimisi, 7. oktoober 2019, kell 12:56:13)
[GCC 8.3.0] Linuxil
Lisateabe saamiseks sisestage „help“, „copyright“, „credits“ või „litsents“.
// Importige urllib>>> importige urllib.taotlus
// Imeta BeautifulSoup
>>> bs4-st importige BeautifulSoup
// Sisestage URL, mille soovite tuua
>>> my_url = 'https: // linuxhint.com / '
// URL-i veebisaidi taotlemine käsu urlopen abil
>>> klient = urllib.taotlus.urlopen (my_url)
// Salvestage HTML-veebileht muutuja „html_page”
>>> html_page = klient.loe ()
// Pärast veebilehe toomist sulgege URL-i ühendus
>>> klient.Sulge()
// parsige HTML-i veebileht kraapimiseks väärtuseks BeautifulSoup
>>> page_soup = BeautifulSoup (html_leht, "html.parser ")
Vaatame nüüd huvipakkuvate asjade leidmiseks lihtsalt kopeeritud ja kleebitud HTML-i lähtekoodi.
Näete, et esimene artikkel on loetletud Linuxhinis.com kannab nime “74 Bash Operators Examples”, leidke see lähtekoodist. See on suletud päise siltide vahele ja selle kood on
title = "74 Bash Operaatori näidet"> 74 Bash Operaatorit
Näited
Sama kood kordub vaid artiklite pealkirjade ja linkide muutmisega. Järgmises artiklis on järgmine HTML-kood
title = "Kuidas seadistada laki vahemälu Ubuntu 18-s.04 ">
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
Näete, et kõik artiklid, kaasa arvatud need kaks, on suletud samasse
”Märgendit ja kasutage sama klassi“ entry-title ”. Saame kõigi funktsioonide leidmiseks ja loetlemiseks kasutada funktsiooni FindAll ilusas supis”Millel on klassi“ kande pealkiri ”. Sisestage oma Pythoni konsoolile järgmine // See käsk leiab kõik”Sildielemendid, millel on klassi nimi
„Kande pealkiri”. Väljund salvestatakse massiivi.
>>> artiklid = leht_supp.findAll ("h2" ,
"class": "entry-title")
// Linuxhindi esilehelt leitud artiklite arv.com
>>> len (artiklid)
102
// Esmalt välja võetud “”Sildielement, mis sisaldab artikli nime ja linki
>>> artiklid [0]
title = "74 Bash Operaatorite näidet">
74 Bashi operaatorite näited
// Teine väljavõte “”Sildielement, mis sisaldab artikli nime ja linki
>>> artiklid [1]
title = "Kuidas seadistada laki vahemälu Ubuntu 18-s.04 ">
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
// Ainult teksti kuvamine HTML-i siltides, kasutades tekstifunktsiooni
>>> artiklid [1].teksti
'Kuidas seadistada laki vahemälu Ubuntu 18-s.04 '
”Sildielemendid, millel on klassi nimi
„Kande pealkiri”. Väljund salvestatakse massiivi.
>>> artiklid = leht_supp.findAll ("h2" ,
"class": "entry-title")
// Linuxhindi esilehelt leitud artiklite arv.com
>>> len (artiklid)
102
// Esmalt välja võetud “”Sildielement, mis sisaldab artikli nime ja linki
>>> artiklid [0]
title = "74 Bash Operaatorite näidet">
74 Bashi operaatorite näited
// Teine väljavõte “”Sildielement, mis sisaldab artikli nime ja linki
>>> artiklid [1]
title = "Kuidas seadistada laki vahemälu Ubuntu 18-s.04 ">
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
// Ainult teksti kuvamine HTML-i siltides, kasutades tekstifunktsiooni
>>> artiklid [1].teksti
'Kuidas seadistada laki vahemälu Ubuntu 18-s.04 '
>>> artiklid [0]
title = "74 Bash Operaatorite näidet">
74 Bashi operaatorite näited
// Teine väljavõte “
”Sildielement, mis sisaldab artikli nime ja linki
>>> artiklid [1]
title = "Kuidas seadistada laki vahemälu Ubuntu 18-s.04 ">
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
// Ainult teksti kuvamine HTML-i siltides, kasutades tekstifunktsiooni
>>> artiklid [1].teksti
'Kuidas seadistada laki vahemälu Ubuntu 18-s.04 '
title = "Kuidas seadistada laki vahemälu Ubuntu 18-s.04 ">
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
Nüüd, kui meil on kõigi 102 HTML-i loend,
”Sildielemendid, mis sisaldavad artikli linki ja artikli pealkirja. Saame välja võtta nii artiklite lingid kui ka pealkirjad. Linkide väljavõtmiseks”Silte, saame kasutada järgmist koodi // Järgmine kood eraldab lingi esimesest sildi element
>>> link artiklites [0].find_all ('a', href = True):
... print (link ['href'])
…
https: // linuxhint.com / bash_operator_examples /
Nüüd saame kirjutada for loopi, mis kordub iga
”Sildielement loendis“ artiklid ”ning väljavõtte artikli link ja pealkiri. >>> i vahemikus (0,10):
... print (artiklid [i].tekst)
... link artiklites [i].find_all ('a', href = True):
... print (link ['href'] + "\ n")
…
74 Bashi operaatorite näited
https: // linuxhint.com / bash_operator_examples /
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
https: // linuxhint.com / varnish_cache_ubuntu_1804 /
PineTime: Linux-sõbralik nutikell
https: // linuxhint.com / pinetime_linux_smartwatch /
10 parimat odavat Linuxi sülearvutit, mida saab eelarvega osta
https: // linuxhint.com / best_cheap_linux_laptops /
HD-vormingus uuendatud versioonid Linuxile mõeldud mängud, millel pole kunagi olnud Linuxi versiooni
https: // linuxhint.com / hd_remastered_games_linux /
60 FPS ekraani salvestamise rakendust Linuxile
https: // linuxhint.com / 60_fps_screen_recording_apps_linux /
74 Bashi operaatorite näited
https: // linuxhint.com / bash_operator_examples /
... jupp ..
Samamoodi salvestate need tulemused JSON- või CSV-faili.
Järeldus
Teie igapäevased ülesanded pole ainult failihaldus ega süsteemi käskude täitmine. Samuti saate veebiga seotud ülesandeid, näiteks failide allalaadimise automatiseerimist või andmete väljavõtet, automatiseerida, kraapides veebi Pythonis. See artikkel piirdus ainult lihtsa andmete väljavõtmisega, kuid saate tohutult automatiseerida ülesandeid, kasutades „urllib” ja „BeautifulSoup”.
>>> link artiklites [0].find_all ('a', href = True):
... print (link ['href'])
…
https: // linuxhint.com / bash_operator_examples /
... print (artiklid [i].tekst)
... link artiklites [i].find_all ('a', href = True):
... print (link ['href'] + "\ n")
…
74 Bashi operaatorite näited
https: // linuxhint.com / bash_operator_examples /
Kuidas seadistada laki vahemälu Ubuntu 18-s.04
https: // linuxhint.com / varnish_cache_ubuntu_1804 /
PineTime: Linux-sõbralik nutikell
https: // linuxhint.com / pinetime_linux_smartwatch /
10 parimat odavat Linuxi sülearvutit, mida saab eelarvega osta
https: // linuxhint.com / best_cheap_linux_laptops /
HD-vormingus uuendatud versioonid Linuxile mõeldud mängud, millel pole kunagi olnud Linuxi versiooni
https: // linuxhint.com / hd_remastered_games_linux /
60 FPS ekraani salvestamise rakendust Linuxile
https: // linuxhint.com / 60_fps_screen_recording_apps_linux /
74 Bashi operaatorite näited
https: // linuxhint.com / bash_operator_examples /
... jupp ..