Nubraukite svetainę naudodami šią gražią sriubos „Python“ mokymo programą

Nubraukite svetainę naudodami šią gražią sriubos „Python“ mokymo programą

„Beautiful Soup“ yra atvirojo kodo „Python“ biblioteka. Jis naudoja naršymo analizatorius, kad nuskaitytų XML ir HTML failų turinį. Jums reikia duomenų keliems analitiniams tikslams. Tačiau jei dar nesate susipažinę su „Python“ ir žiniatinklio grandymu, „Python“ gražios sriubos biblioteką verta išbandyti kuriant žiniatinklio grandymo projektą.





Naudodami „Python“ atvirojo kodo „Beautiful Soup“ biblioteką, galite gauti duomenis nuskaitydami bet kurią tinklalapio dalį ar elementą, maksimaliai valdydami procesą. Šiame straipsnyje apžvelgiame, kaip galite naudoti gražią sriubą svetainei nuskaityti.





Kaip įdiegti gražią sriubą ir pradėti nuo jos

Prieš tęsdami, šiame gražios sriubos mokymo straipsnyje naudosime „Python 3“ ir gražus sriuba4 , naujausia „Beautiful Soup“ versija. Įsitikinkite, kad jūs sukurti „Python“ virtualią aplinką norėdami atskirti savo projektą ir jo paketus nuo vietinėje mašinoje esančių.





programa, kuri atpažįsta objektus pagal paveikslėlį

Norėdami pradėti, savo virtualioje aplinkoje turite įdiegti „Beautiful Soup“ biblioteką. „Beautiful Soup“ galima įsigyti kaip „PyPi“ paketą visoms operacinėms sistemoms, todėl galite jį įdiegti naudodami pip įdiegti beautifulsoup4 komandą per terminalą.

Tačiau jei naudojate „Debian“ ar „Linux“, aukščiau pateikta komanda vis tiek veikia, tačiau ją galite įdiegti naudodami paketų tvarkyklę apt-get install python3-bs4 .



„Beautiful Soup“ tiesiogiai nenubraukia URL. Jis veikia tik su paruoštais HTML arba XML failais. Tai reiškia, kad negalite tiesiogiai perduoti URL. Norėdami išspręsti šią problemą, prieš pateikdami „Beautiful Soup“, turite gauti tikslinės svetainės URL su „Python“ užklausų biblioteka.

Jei norite, kad ši biblioteka būtų prieinama jūsų grandikliui, paleiskite pip diegimo užklausos komandą per terminalą.





Norėdami naudoti XML analizavimo biblioteką, paleiskite pip įdiegti lxml ją įdiegti.

Patikrinkite tinklalapį, kurį norite ištrinti

Prieš nuskaitydami bet kurią jums nepažįstamą svetainę, geriausia praktika yra patikrinti jos elementus. Tai galite padaryti perjungę naršyklę į kūrėjo režimą. Tai gana lengva naudoti „Chrome DevTools“ jei naudojate „Google Chrome“.





Tačiau būtina apžiūrėti tinklalapį ir sužinoti daugiau apie jo HTML žymas, atributus, klases ir ID. Tai atskleidžia pagrindinius tinklalapio elementus ir jo turinio tipus.

Tai taip pat padeda jums sukurti geriausias strategijas, kurias galite naudoti norėdami gauti tikslius duomenis iš svetainės ir kaip juos gauti.

Kaip nuskaityti svetainės duomenis gražia sriuba

Dabar, kai viskas yra paruošta, atidarykite pageidaujamą kodo redaktorių ir sukurkite naują „Python“ failą, suteikdami jam pasirinktą pavadinimą. Tačiau taip pat galite naudokitės žiniatinklio IDE, pvz., „Jupyter Notebook“ jei nesate susipažinę su „Python“ paleidimu per komandinę eilutę.

Tada importuokite reikalingas bibliotekas:

from bs4 import BeautifulSoup
import requests

Pirmiausia pažiūrėkime, kaip veikia užklausų biblioteka:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Kai paleisite aukščiau esantį kodą, jis grąžins 200 būseną, nurodydamas, kad jūsų užklausa sėkminga. Priešingu atveju gausite 400 būseną ar kitas klaidų būsenas, rodančias nepavykusią GET užklausą.

Nepamirškite skliausteliuose esančio svetainės URL visada pakeisti tiksliniu URL.

Kai gausite svetainę su gauti užklausą, tada perduodate ją „Beautiful Soup“, kuri dabar gali skaityti turinį kaip HTML arba XML failus, naudodami integruotą XML arba HTML analizatorių, priklausomai nuo pasirinkto formato.

Pažvelkite į šį kitą kodo fragmentą, kad sužinotumėte, kaip tai padaryti naudojant HTML analizatorių:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Aukščiau pateiktas kodas grąžina visą tinklalapio DOM su turiniu.

Taip pat galite gauti labiau suderintą DOM versiją naudodami apsimesti metodas. Galite tai išbandyti, kad pamatytumėte jo išvestį:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Taip pat galite gauti gryną tinklalapio turinį neįkeldami jo elemento į .tekstas metodas:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

Kaip ištrinti tinklalapio turinį pagal žymos pavadinimą

Taip pat galite subraižyti turinį į tam tikrą žymą naudodami gražią sriubą. Norėdami tai padaryti, į gražios sriubos grandiklio užklausą turite įtraukti tikslinės žymos pavadinimą.

Pavyzdžiui, pažiūrėkime, kaip galite gauti turinį h2 tinklalapio žymes.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

Aukščiau esančiame kodo fragmente sriuba.h2 grąžina pirmąjį h2 tinklalapio elementą ir ignoruoja likusią dalį. Norėdami įkelti visus h2 elementus, galite naudoti find_all įmontuota funkcija ir dėl „Python“ kilpa:

kaip atskirti xbox one valdiklį
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Tas kodo blokas grąžina viską h2 elementai ir jų turinys. Tačiau turinį galite gauti neįkeldami žymos naudodami .string metodas:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Šį metodą galite naudoti bet kuriai HTML žymei. Viskas, ką jums reikia padaryti, tai pakeisti h2 pažymėkite tą, kuris jums patinka.

Tačiau taip pat galite nuskaityti daugiau žymų, įvesdami žymų sąrašą į find_all metodas. Pavyzdžiui, žemiau esantis kodo blokas nuskaito turinį į , h2 , ir titulas žymės:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

Kaip ištrinti tinklalapį naudojant ID ir klasės pavadinimą

Apžiūrėjusi svetainę naudodami „DevTools“, ji leidžia jums daugiau sužinoti apie id ir klasės atributus, turinčius kiekvieną elementą savo DOM. Kai turėsite tą informaciją, galite nuskaityti tą tinklalapį naudodami šį metodą. Tai naudinga, kai tikslinio komponento turinys išjungiamas iš duomenų bazės.

Galite naudoti rasti ID ir klasės grandiklių metodas. Skirtingai nuo find_all metodas, grąžinantis pasikartojantį objektą, rasti metodas veikia pagal vieną, nekartojamą tikslą, kuris yra id tokiu atveju. Taigi, jums nereikia naudoti dėl kilpa su juo.

Pažvelkime į pavyzdį, kaip galite nukopijuoti puslapio turinį naudodami ID:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Norėdami tai padaryti naudodami klasės pavadinimą, pakeiskite id su klasė . Tačiau rašymas klasė tiesiogiai sukelia sintaksės painiavą, nes „Python“ ją laiko raktiniu žodžiu. Norėdami apeiti šią klaidą, prieš klasę turite parašyti pabraukimą taip: klasė_ .

Iš esmės eilutė, kurioje yra ID, tampa tokia:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Tačiau tinklalapį galite nukopijuoti ir paskambinę tam tikros žymos pavadinimui, nurodydami atitinkamą ID arba klasę:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Kaip pasigaminti daugkartinį grandiklį su gražia sriuba

Galite sukurti klasę ir sujungti visą ankstesnį kodą į tos klasės funkciją, kad sukurtumėte daugkartinį grandiklį, kuris gautų kai kurių žymų turinį ir jų ID. Tai galime padaryti sukurdami funkciją, kuri priima penkis argumentus: URL, du žymų pavadinimus ir atitinkamus jų ID ar klases.

Tarkime, kad norite nuskaityti marškinių kainą iš elektroninės prekybos svetainės. Žemiau pateikta pavyzdinė grandiklio klasė išskiria kainų ir marškinių žymas su atitinkamais ID arba klasėmis ir grąžina ją kaip „Pandas“ duomenų rėmelį su stulpelių pavadinimais „Kaina“ ir „Marškinių_pavadinimas“.

Įsitikinkite, kad jūs pip install pandas per terminalą, jei to dar nepadarėte.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Ką tik sukurtas grandiklis yra daugkartinio naudojimo modulis, kurį galite importuoti ir naudoti kitame „Python“ faile. Norėdami paskambinti nubraukti funkciją iš savo klasės, jūs naudojate scrapeit.scrape („Svetainės URL“, „price_tag“, „price_id“, „shirt_tag“, „shirt_id“) . Jei nepateiksite URL ir kitų parametrų, Kitas pareiškimas ragina tai padaryti.

Jei norite naudoti tą „scaper“ kitame „Python“ faile, galite jį importuoti taip:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Pastaba: grandiklis_modulis yra „Python“ failo, turinčio grandiklio klasę, pavadinimas.

Taip pat galite patikrinti Graži sriubos dokumentacija jei norite giliau pasinerti į tai, kaip kuo geriau jį išnaudoti.

Graži sriuba yra vertingas žiniatinklio grandymo įrankis

„Beautiful Soup“ yra galingas „Python“ ekrano grandiklis, leidžiantis valdyti, kaip jūsų duomenys gaunami perbraukiant. Tai vertingas verslo įrankis, nes jis gali suteikti jums prieigą prie konkurentų žiniatinklio duomenų, tokių kaip kainodara, rinkos tendencijos ir dar daugiau.

slinkdamas žemyn pelės ratukas slenka aukštyn

Nors šiame straipsnyje sukūrėme žymų grandiklį, vis tiek galite žaisti su šia galinga „Python“ biblioteka, kad sukurtumėte daugiau naudingų grandymo įrankių.

Dalintis Dalintis „Tweet“ Paštu Geriausi žiniatinklio grandymo įrankiai internete

Ar reikia rinkti duomenis iš svetainių analitiniams tikslams? Šie žiniatinklio grandymo įrankiai palengvina.

Skaityti toliau
Susijusios temos
  • Programavimas
  • Python
Apie autorių Idisou Omisola(Paskelbti 94 straipsniai)

Idowu aistringai domisi visomis išmaniosiomis technologijomis ir produktyvumu. Laisvalaikiu jis žaidžia koduodamasis ir nuobodžiai persijungia į šachmatų lentą, tačiau taip pat mėgsta retkarčiais atitrūkti nuo rutinos. Jo aistra parodyti žmonėms kelią aplink šiuolaikines technologijas skatina jį daugiau rašyti.

Daugiau iš Idowu Omisola

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia