Web-kaappaus, prosessi tietojen poimimiseksi verkkosivustoilta, on noussut tehokkaaksi tekniikaksi tiedon keräämiseen Internetin laajuudesta. Tässä opetusohjelmassa tutkimme erilaisia Python-kirjastoja ja -moduuleja, joita käytetään yleisesti web-kaappaukseen, ja tutkimme, miksi Python 3 on suositeltu valinta tähän tehtävään.
Tärkeimmät paketit ja työkalut Python Web-kaappaukseen
Uusin versio Python , tarjoaa laajan valikoiman työkaluja ja kirjastoja, jotka on suunniteltu erityisesti verkon kaapimiseen, mikä tekee tietojen hakemisesta verkosta helpompaa kuin koskaan.
Sisällysluettelo
- Pyyntömoduuli
- BeautifulSoup kirjasto
- Seleeni
- Lxml
- Urllib-moduuli
- PyautoGUI
- Ajoittaa
- Miksi Python Web Scraping?
Pyyntömoduuli
Pyyntökirjastoa käytetään HTTP-pyyntöjen tekemiseen tiettyyn URL-osoitteeseen ja se palauttaa vastauksen. Python-pyynnöt tarjoavat sisäänrakennettuja toimintoja sekä pyynnön että vastauksen hallintaan.
pip install requests>
Esimerkki: Pyynnön tekeminen
Python-pyyntömoduulissa on useita sisäänrakennettuja menetelmiä HTTP-pyyntöjen tekemiseen määritettyyn URI-osoitteeseen GET-, POST-, PUT-, PATCH- tai HEAD-pyyntöjen avulla. HTTP-pyynnön tarkoituksena on joko noutaa tietoja määritetystä URI:sta tai siirtää tietoja palvelimelle. Se toimii pyyntö-vastausprotokollana asiakkaan ja palvelimen välillä. Täällä käytämme GET-pyyntöä. The GET-menetelmä käytetään tietojen hakemiseen tietystä palvelimesta tietyn URI:n avulla. GET-menetelmä lähettää koodatut käyttäjätiedot, jotka on liitetty sivupyyntöön.
Python
import requests # Making a GET request r = requests.get('https://www.techcodeview.com) # check status code for response received # success code - 200 print(r) # print content of request print(r.content)> Lähtö

Lisätietoja saat osoitteestamme Python-pyyntöjen opetusohjelma .
BeautifulSoup kirjasto
Beautiful Soup tarjoaa muutamia yksinkertaisia menetelmiä ja Pythonic-lauseita jäsennyspuun ohjaamiseen, etsimiseen ja muuttamiseen: työkalupakki asiakirjan tutkimiseen ja tarvitsemasi poistamiseen. Sovelluksen dokumentointi ei vaadi paljon koodia.
Beautiful Soup muuntaa saapuvat tietueet automaattisesti Unicode-muotoon ja lähtevät lomakkeet UTF-8-muotoon. Sinun ei tarvitse miettiä koodauksia, ellei asiakirja määrittele koodausta, eikä Beautiful Soup saa sitä. Sitten sinun tarvitsee vain valita alkuperäinen koodaus. Beautiful Soup sijaitsee kuuluisien Python-jäsentimien, kuten LXML:n ja HTML:n, päällä, jolloin voit kokeilla erilaisia jäsennysstrategioita tai vaihtaa nopeutta joustavuuden vuoksi.
pip install beautifulsoup4>
Esimerkki
- Kirjastojen tuonti: Koodi tuo pyyntökirjaston HTTP-pyyntöjen tekemiseen ja BeautifulSoup-luokan bs4-kirjastosta HTML:n jäsentämistä varten.
- GET-pyynnön tekeminen: Se lähettää GET-pyynnön osoitteeseen https://www.techcodeview.com
- Tilakoodin tarkistus: Se tulostaa vastauksen tilakoodin, tyypillisesti 200 onnistumisen vuoksi.
- HTML-koodin jäsentäminen : Vastauksen HTML-sisältö jäsennetään BeautifulSoupin avulla ja tallennetaan muuttujakeittoon.
- Pretified HTML:n tulostaminen: Se tulostaa esitellyn version jäsennetystä HTML-sisällöstä luettavuutta ja analysointia varten.
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.techcodeview.com) # check status code for response received # success code - 200 print(r) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') print(soup.prettify())> Lähtö

Elementtien etsiminen luokittain
Nyt haluaisimme poimia hyödyllisiä tietoja HTML-sisällöstä. Soup-objekti sisältää kaikki sisäkkäisen rakenteen tiedot, jotka voidaan poimia ohjelmallisesti. Sivusto, jonka haluamme kaapata, sisältää paljon tekstiä, joten nyt raavitaan kaikki se sisältö. Ensin tarkastetaan verkkosivu, jonka haluamme kaapia.
valmistautua testiin mockito
Yllä olevassa kuvassa näemme, että koko sivun sisältö on div-osan alla, jossa on luokan merkintäsisältö. Käytämme etsintäluokkaa. Tämä luokka löytää annetun tunnisteen annetulla attribuutilla. Meidän tapauksessamme se löytää kaikki div, joiden luokka on merkintäsisältö.
Näemme, että sivun sisältö on alla
tag. Nyt meidän on löydettävä kaikki tässä luokassa olevat p-tunnisteet. Voimme käyttääetsi_kaikki luokan BeautifulSoup.
Python import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.techcodeview.com) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') s = soup.find('div', class_='entry-content') content = s.find_all('p') print(content)> Lähtö:

Lisätietoja saat osoitteestamme Python kaunis keitto .
Seleeni
Selenium on suosittu Python-moduuli, jota käytetään verkkoselaimien automatisointiin. Sen avulla kehittäjät voivat ohjata verkkoselaimia ohjelmallisesti, mikä mahdollistaa tehtävien, kuten verkon kaapimisen, automaattisen testauksen ja verkkosovellusten vuorovaikutuksen. Selenium tukee useita verkkoselaimia, mukaan lukien Chrome, Firefox, Safari ja Edge, joten se on monipuolinen työkalu selaimen automatisointiin.
Esimerkki 1: Firefoxille
Tässä esimerkissä ohjaamme selaimen Google-hakusivulle kyselyparametrilla geeksforgeeks. Selain lataa tämän sivun, ja voimme sitten jatkaa vuorovaikutusta sen kanssa ohjelmallisesti Seleenin avulla. Tämä vuorovaikutus voi sisältää tehtäviä, kuten hakutulosten poimimista, linkkien napsauttamista tai tietyn sisällön poistamista sivulta.
Python # import webdriver from selenium import webdriver # create webdriver object driver = webdriver.Firefox() # get google.co.in driver.get('https://google.co.in / search?q = geeksforgeeks')> Lähtö

Esimerkki 2: Chrome
- Tuomme webdriver-moduulin Selenium-kirjastosta.
- Määritämme polun web-ohjaimen suoritettavaan tiedostoon. Sinun on ladattava selaimellesi sopiva ohjain ja annettava polku siihen. Tässä esimerkissä käytämme Chrome-ohjainta.
- Luomme verkkoselaimen uuden esiintymän käyttämällä webdriver.Chrome()-komentoa ja välitämme polun Chrome-ajurin suoritettavaan tiedostoon argumenttina.
- Siirrymme verkkosivulle kutsumalla get()-menetelmää selainobjektissa ja välittämällä verkkosivun URL-osoitteen.
- Poimimme tietoa verkkosivulta Seleniumin tarjoamilla erilaisilla menetelmillä. Tässä esimerkissä noudetaan sivun otsikko käyttämällä selainobjektin title-attribuuttia.
- Lopuksi suljemme selaimen quit()-menetelmällä.
# importing necessary packages from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager # for holding the resultant list element_list = [] for page in range(1, 3, 1): page_url = 'https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=' + str(page) driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(page_url) title = driver.find_elements(By.CLASS_NAME, 'title') price = driver.find_elements(By.CLASS_NAME, 'price') description = driver.find_elements(By.CLASS_NAME, 'description') rating = driver.find_elements(By.CLASS_NAME, 'ratings') for i in range(len(title)): element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text]) print(element_list) #closing the driver driver.close()>
Lähtö

Lisätietoja saat osoitteestamme Python Selenium .
Lxml
Pythonin lxml-moduuli on tehokas kirjasto XML- ja HTML-dokumenttien käsittelyyn. Se tarjoaa tehokkaat XML- ja HTML-jäsennysominaisuudet sekä yksinkertaisen ja Pythonic-sovellusliittymän. lxml on laajalti käytössä Python-verkkokaappauksessa sen nopeuden, joustavuuden ja helppokäyttöisyyden vuoksi.
pip install lxml>
Esimerkki
Tässä on yksinkertainen esimerkki, joka havainnollistaa lxml-moduulin käyttöä Python-verkkokaappaukseen:
- Tuomme html-moduulin lxml:stä HTTP-pyyntöjen lähettämiseen tarkoitetun pyyntömoduulin kanssa.
- Määritämme sen verkkosivuston URL-osoitteen, jonka haluamme kaapata.
- Lähetämme sivustolle HTTP GET -pyynnön requests.get()-funktiolla ja noutamme sivun HTML-sisällön.
- Jäsennämme HTML-sisällön lxml:n html.fromstring()-funktiolla, joka palauttaa HTML-elementtipuun.
- Käytämme XPath-lausekkeita poimimaan tiettyjä elementtejä HTML-puusta. Tässä tapauksessa poimimme kaiken tekstisisällön (ankkuri) elementtejä sivulla.
- Toistamme poimittujen linkkien otsikot ja tulostamme ne.
from lxml import html import requests # Define the URL of the website to scrape url = 'https://example.com' # Send an HTTP request to the website and retrieve the HTML content response = requests.get(url) # Parse the HTML content using lxml tree = html.fromstring(response.content) # Extract specific elements from the HTML tree using XPath # For example, let's extract the titles of all the links on the page link_titles = tree.xpath('//a/text()') # Print the extracted link titles for title in link_titles: print(title)> Lähtö
More information...>
Urllib-moduuli
Pythonin urllib-moduuli on sisäänrakennettu kirjasto, joka tarjoaa toimintoja URL-osoitteiden käsittelyyn. Sen avulla voit olla vuorovaikutuksessa verkkosivujen kanssa hakemalla URL-osoitteita (Uniform Resource Locators), avaamalla ja lukemalla tietoja niiltä ja suorittamalla muita URL-osoitteisiin liittyviä tehtäviä, kuten koodausta ja jäsentämistä. Urllib on paketti, joka kerää useita moduuleja URL-osoitteiden käsittelyä varten, kuten:
- urllib.request avaamista ja lukemista varten.
- urllib.parse URL-osoitteiden jäsentämiseen
- urllib.error esitetyille poikkeuksille
- urllib.robotparser robot.txt-tiedostojen jäsentämiseen
Jos urllib ei ole ympäristössäsi, asenna se suorittamalla alla oleva koodi.
pip install urllib3>
Esimerkki
Tässä on yksinkertainen esimerkki, joka osoittaa, kuinka urllib-moduulia käytetään verkkosivun sisällön hakemiseen:
- Määritämme noudettavan verkkosivun URL-osoitteen.
- Käytämme urllib.request.urlopen()-funktiota URL-osoitteen avaamiseen ja vastausobjektin hankkimiseen.
- Luemme vastausobjektin sisällön read()-menetelmällä.
- Koska sisältö palautetaan tavuina, puramme sen merkkijonoksi käyttämällä decode()-menetelmää utf-8-koodauksella.
- Lopuksi tulostamme verkkosivun HTML-sisällön.
import urllib.request # URL of the web page to fetch url = 'https://www.example.com' try: # Open the URL and read its content response = urllib.request.urlopen(url) # Read the content of the response data = response.read() # Decode the data (if it's in bytes) to a string html_content = data.decode('utf-8') # Print the HTML content of the web page print(html_content) except Exception as e: print('Error fetching URL:', e)> Lähtö

PyautoGUI
Pythonin pyautogui-moduuli on monialustainen GUI-automaatiokirjasto, jonka avulla kehittäjät voivat ohjata hiirtä ja näppäimistöä tehtävien automatisoimiseksi. Vaikka sitä ei ole erityisesti suunniteltu verkkokaappaukseen, sitä voidaan käyttää yhdessä muiden verkkokaappauskirjastojen, kuten Selenium, kanssa vuorovaikutuksessa sellaisten verkkosivujen kanssa, jotka vaativat käyttäjän syötteitä tai simuloivat ihmisen toimia.
pip3 install pyautogui>
Esimerkki
Tässä esimerkissä pyautoguita käytetään vierittämään ja ottamaan kuvakaappaus hakutulossivusta, joka on saatu kirjoittamalla kysely haun syöttökenttään ja napsauttamalla hakupainiketta Seleenin avulla.
Python import pyautogui # moves to (519,1060) in 1 sec pyautogui.moveTo(519, 1060, duration = 1) # simulates a click at the present # mouse position pyautogui.click() # moves to (1717,352) in 1 sec pyautogui.moveTo(1717, 352, duration = 1) # simulates a click at the present # mouse position pyautogui.click()>
Lähtö

Ajoittaa
Pythonin aikataulumoduuli on yksinkertainen kirjasto, jonka avulla voit ajoittaa Python-funktiot suoriutumaan tietyin väliajoin. Se on erityisen hyödyllinen verkkokaappauksessa Pythonissa, kun sinun on säännöllisesti raaputtava tietoja verkkosivustolta ennalta määritetyin väliajoin, kuten tunneittain, päivittäin tai viikoittain.
Esimerkki
- Tuomme tarvittavat moduulit: aikataulun, ajan, pyynnöt ja BeautifulSoupin bs4-paketista.
- Määrittelemme funktion scrape_data(), joka suorittaa web-kaappaustehtävän. Tämän toiminnon sisällä lähetämme GET-pyynnön verkkosivustolle (korvaa 'https://example.com' sen verkkosivuston URL-osoitteella, jonka haluat kaapata), jäsennämme HTML-sisällön BeautifulSoupin avulla, puramme haluamasi tiedot ja tulostamme sen .
- Ajoitamme scrape_data()-funktion suoritettavaksi joka tunti käyttämällä schedule.every().hour.do(scrape_data).
- Siirrymme pääsilmukkaan, joka tarkistaa jatkuvasti odottavat ajoitetut tehtävät komennolla schedule.run_pending() ja nukkuu 1 sekunnin iteraatioiden välillä estääkseen silmukan kuluttamasta liikaa suoritinta.
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)> Lähtö

Miksi Python3 Web-kaappaukseen?
Pythonin suosio web-kaappauksessa johtuu useista tekijöistä:
- Helppokäyttöisyys : Pythonin puhdas ja luettava syntaksi tekee koodin ymmärtämisestä ja kirjoittamisesta helppoa jopa aloittelijoille. Tämä yksinkertaisuus nopeuttaa kehitysprosessia ja vähentää verkon kaavintatehtävien oppimiskäyrää.
- Rikas ekosysteemi : Python tarjoaa laajan ekosysteemin kirjastoja ja kehyksiä, jotka on räätälöity verkkojen kaapimiseen. Kirjastot, kuten BeautifulSoup, Scrapy ja Requests, yksinkertaistavat HTML-koodin jäsennysprosessia, mikä tekee tietojen poimimisesta helppoa.
- Monipuolisuus : Python on monipuolinen kieli, jota voidaan käyttää monenlaisiin tehtäviin web-kaappauksen lisäksi. Sen joustavuuden ansiosta kehittäjät voivat integroida web-kaappauksen saumattomasti suurempiin projekteihin, kuten data-analyysiin, koneoppimiseen tai verkkokehitykseen.
- Yhteisön tuki : Pythonilla on suuri ja aktiivinen kehittäjäyhteisö, jotka osallistuvat sen kirjastoihin ja tarjoavat tukea foorumien, opetusohjelmien ja dokumentaation kautta. Tämä runsas resurssi varmistaa, että kehittäjät voivat saada apua ja ohjeita verkkoraapimiseen liittyvien haasteiden ratkaisemisessa.