logo

Vadnica za spletno strganje Python

Spletno strganje, postopek pridobivanja podatkov s spletnih mest, se je izkazalo kot zmogljiva tehnika za zbiranje informacij iz ogromnega interneta. V tej vadnici bomo raziskali različne knjižnice in module Python, ki se običajno uporabljajo za spletno strganje, in se poglobili v razloge, zakaj je Python 3 najprimernejša izbira za to nalogo.

mysql ni enako

Bistveni paketi in orodja za spletno strganje Python

Najnovejša različica Python , ponuja bogat nabor orodij in knjižnic, posebej zasnovanih za spletno strganje, zaradi česar je učinkovito in učinkovito pridobivanje podatkov iz spleta lažje kot kdaj koli prej.



Kazalo

Modul za zahteve

Knjižnica zahtev se uporablja za pošiljanje zahtev HTTP na določen URL in vrne odgovor. Zahteve Python nudijo vgrajene funkcije za upravljanje zahtev in odgovorov.

pip install requests>

Primer: izdelava zahteve

Modul za zahteve Python ima več vgrajenih metod za izdelavo zahtev HTTP za določen URI z uporabo zahtev GET, POST, PUT, PATCH ali HEAD. Zahteva HTTP je namenjena pridobivanju podatkov iz določenega URI-ja ali pošiljanju podatkov na strežnik. Deluje kot protokol zahteva-odgovor med odjemalcem in strežnikom. Tukaj bomo uporabili zahtevo GET. The Metoda GET se uporablja za pridobivanje informacij iz danega strežnika z uporabo danega URI-ja. Metoda GET pošlje kodirane podatke o uporabniku, ki so dodani zahtevi strani.



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

Izhod

Zahteve Python naredijo zahtevo GET

Za več informacij se obrnite na našo Vadnica za zahteve Python .



Knjižnica BeautifulSoup

Beautiful Soup ponuja nekaj preprostih metod in besednih zvez Pythonic za vodenje, iskanje in spreminjanje drevesa za razčlenjevanje: komplet orodij za preučevanje dokumenta in odstranjevanje tistega, kar potrebujete. Za dokumentiranje aplikacije ni potrebno veliko kode.

Beautiful Soup samodejno pretvori dohodne zapise v Unicode in odhodne obrazce v UTF-8. Ni vam treba razmišljati o kodiranjih, razen če dokument ne definira kodiranja in ga Beautiful Soup ne more ujeti. Potem morate samo izbrati izvirno kodiranje. Beautiful Soup je poleg slavnih razčlenjevalcev Python, kot sta LXML in HTML, kar vam omogoča, da preizkusite različne strategije razčlenjevanja ali zamenjate hitrost za prilagodljivost.

pip install beautifulsoup4>

Primer

  1. Uvažanje knjižnic: Koda uvozi knjižnico zahtev za izdelavo zahtev HTTP in razred BeautifulSoup iz knjižnice bs4 za razčlenjevanje HTML.
  2. Izdelava zahteve GET: Pošlje zahtevo GET na 'https://www.techcodeview.com
  3. Preverjanje statusne kode: Natisne statusno kodo odgovora, običajno 200 za uspeh.
  4. Razčlenjevanje HTML-ja : Vsebina HTML odgovora je razčlenjena s pomočjo BeautifulSoup in shranjena v spremenljivki soup.
  5. Tiskanje pretificiranega HTML-ja: Natisne prefinjeno različico razčlenjene vsebine HTML za berljivost in analizo.
Python
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())>

Izhod

Python BeautifulSoup Razčlenjevanje HTML

Iskanje elementov po razredih

Zdaj bi radi iz vsebine HTML izluščili nekaj uporabnih podatkov. Objekt soup vsebuje vse podatke v ugnezdeni strukturi, ki jih je mogoče programsko ekstrahirati. Spletno mesto, ki ga želimo postrgati, vsebuje veliko besedila, zato zdaj postrgajmo vso to vsebino. Najprej preglejmo spletno stran, ki jo želimo postrgati.


Na zgornji sliki lahko vidimo, da je vsa vsebina strani pod divom z vsebino vnosa razreda. Uporabili bomo razred najdi. Ta razred bo našel dano oznako z danim atributom. V našem primeru bo našel vse dive, ki imajo razred kot vstopno vsebino.

Vidimo lahko, da je vsebina strani pod

oznaka. Zdaj moramo najti vse oznake p, ki so prisotne v tem razredu. Lahko uporabimonajdi_vse razredu 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)>

Izhod:

find_all bs4

Za več informacij se obrnite na našo Python BeautifulSoup .

Selen

Selenium je priljubljen modul Python, ki se uporablja za avtomatizacijo spletnih brskalnikov. Razvijalcem omogoča programsko upravljanje spletnih brskalnikov, kar omogoča opravila, kot so spletno strganje, samodejno testiranje in interakcija s spletnimi aplikacijami. Selenium podpira različne spletne brskalnike, vključno s Chrome, Firefox, Safari in Edge, zaradi česar je vsestransko orodje za avtomatizacijo brskalnika.

Primer 1: Za Firefox

V tem konkretnem primeru usmerjamo brskalnik na iskalno stran Google s poizvedbenim parametrom geeksforgeeks. Brskalnik bo naložil to stran, nato pa lahko nadaljujemo s programsko interakcijo z njo z uporabo Seleniuma. Ta interakcija lahko vključuje naloge, kot je pridobivanje rezultatov iskanja, klikanje povezav ali strganje določene vsebine s strani.

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

Izhod

za-firefox

Primer 2: Za Chrome

  1. Modul webdriver uvozimo iz knjižnice Selenium.
  2. Določimo pot do izvedljive datoteke spletnega gonilnika. Prenesti morate ustrezen gonilnik za vaš brskalnik in podati pot do njega. V tem primeru uporabljamo gonilnik Chrome.
  3. Ustvarimo nov primerek spletnega brskalnika z uporabo webdriver.Chrome() in kot argument posredujemo pot do izvršljive datoteke gonilnika Chrome.
  4. Do spletne strani se pomaknemo tako, da na objektu brskalnika pokličemo metodo get() in posredujemo URL spletne strani.
  5. Informacije iz spletne strani pridobivamo z različnimi metodami, ki jih ponuja Selenium. V tem primeru pridobimo naslov strani z uporabo atributa naslova objekta brskalnika.
  6. Na koncu zapremo brskalnik z metodo quit().
Python
# 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()>

Izhod

Za več informacij se obrnite na našo Python Selenium .

Lxml

Modul lxml v Pythonu je zmogljiva knjižnica za obdelavo dokumentov XML in HTML. Zagotavlja visoko zmogljive zmožnosti razčlenjevanja XML in HTML skupaj s preprostim API-jem Pythonic. lxml se pogosto uporablja pri spletnem strganju Python zaradi svoje hitrosti, prilagodljivosti in enostavne uporabe.

pip install lxml>

Primer

Tukaj je preprost primer, ki prikazuje, kako uporabiti modul lxml za spletno strganje Python:

  1. Modul html uvozimo iz lxml skupaj z modulom requests za pošiljanje HTTP zahtev.
  2. Določimo URL spletnega mesta, ki ga želimo postrgati.
  3. Spletnemu mestu pošljemo zahtevo HTTP GET s funkcijo requests.get() in pridobimo vsebino HTML strani.
  4. Vsebino HTML razčlenimo s funkcijo html.fromstring() iz lxml, ki vrne drevo elementov HTML.
  5. Izraze XPath uporabljamo za ekstrahiranje določenih elementov iz drevesa HTML. V tem primeru ekstrahiramo besedilno vsebino vseh (sidrnih) elementov na strani.
  6. Ponavljamo čez izvlečene naslove povezav in jih natisnemo.
Python
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)>

Izhod

More information...>

Modul Urllib

Modul urllib v Pythonu je vgrajena knjižnica, ki ponuja funkcije za delo z URL-ji. Omogoča vam interakcijo s spletnimi stranmi s pridobivanjem URL-jev (enotnih lokatorjev virov), odpiranjem in branjem podatkov iz njih ter izvajanjem drugih nalog, povezanih z URL-ji, kot sta kodiranje in razčlenjevanje. Urllib je paket, ki zbira več modulov za delo z URL-ji, kot so:

  • urllib.prošnja za odpiranje in branje.
  • urllib.parse za razčlenjevanje URL-jev
  • urllib.error za sprožene izjeme
  • urllib.robotparser za razčlenjevanje datotek robot.txt

Če urllib ni prisoten v vašem okolju, izvedite spodnjo kodo, da ga namestite.

pip install urllib3>

Primer

Tukaj je preprost primer, ki prikazuje, kako uporabiti modul urllib za pridobivanje vsebine spletne strani:

  1. Določimo URL spletne strani, ki jo želimo pridobiti.
  2. Uporabimo funkcijo urllib.request.urlopen(), da odpremo URL in pridobimo odgovorni objekt.
  3. Vsebino objekta odziva preberemo z metodo read().
  4. Ker je vsebina vrnjena kot bajti, jo dekodiramo v niz z uporabo metode decode() s kodiranjem 'utf-8'.
  5. Na koncu natisnemo HTML vsebino spletne strani.
Python
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)>

Izhod

uutt

PyautoGUI

Modul pyautogui v Pythonu je knjižnica za avtomatizacijo grafičnega vmesnika za več platform, ki razvijalcem omogoča nadzor miške in tipkovnice za avtomatizacijo opravil. Čeprav ni zasnovan posebej za spletno strganje, ga je mogoče uporabiti v povezavi z drugimi knjižnicami za spletno strganje, kot je Selenium, za interakcijo s spletnimi stranmi, ki zahtevajo uporabniški vnos ali simulacijo človeških dejanj.

pip3 install pyautogui>

Primer

V tem primeru se pyautogui uporablja za izvajanje drsenja in snemanje posnetka zaslona strani z rezultati iskanja, pridobljenega z vnosom poizvedbe v iskalno vnosno polje in klikom na gumb za iskanje s Seleniumom.

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

Izhod

Urnik

Modul urnika v Pythonu je preprosta knjižnica, ki omogoča načrtovanje izvajanja funkcij Python v določenih intervalih. Še posebej je uporabno pri spletnem strganju v Pythonu, ko morate redno strgati podatke s spletnega mesta v vnaprej določenih intervalih, na primer vsako uro, dnevno ali tedensko.

Primer

  • Potrebne module: urnik, čas, zahteve in BeautifulSoup uvozimo iz paketa bs4.
  • Definiramo funkcijo scrape_data(), ki izvaja nalogo spletnega strganja. Znotraj te funkcije pošljemo zahtevo GET spletnemu mestu (zamenjajte 'https://example.com' z URL-jem spletnega mesta, ki ga želite postrgati), razčlenimo vsebino HTML s pomočjo BeautifulSoup, ekstrahiramo želene podatke in jih natisnemo .
  • Funkcijo scrape_data() načrtujemo za zagon vsako uro z uporabo schedule.every().hour.do(scrape_data).
  • Vstopimo v glavno zanko, ki nenehno preverja čakajoča načrtovana opravila z uporabo schedule.run_pending() in spi 1 sekundo med iteracijami, da preprečimo, da bi zanka porabila preveč CPE.
Python
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)>

Izhod

Zakaj Python3 za spletno strganje?

Priljubljenost Pythona za spletno strganje izhaja iz več dejavnikov:

  1. Enostavnost uporabe : Pythonova čista in berljiva sintaksa olajša razumevanje in pisanje kode tudi začetnikom. Ta preprostost pospeši razvojni proces in skrajša krivuljo učenja za naloge spletnega strganja.
  2. Bogat ekosistem : Python se ponaša z obsežnim ekosistemom knjižnic in ogrodij, prilagojenih za spletno strganje. Knjižnice, kot so BeautifulSoup, Scrapy in Requests, poenostavljajo postopek razčlenjevanja HTML, zaradi česar je pridobivanje podatkov preprosto.
  3. Vsestranskost : Python je vsestranski jezik, ki ga je mogoče uporabiti za širok nabor nalog, ki presegajo spletno strganje. Njegova prilagodljivost razvijalcem omogoča nemoteno integracijo spletnega strganja v večje projekte, kot je analiza podatkov, strojno učenje ali spletni razvoj.
  4. Podpora skupnosti : Python ima veliko in aktivno skupnost razvijalcev, ki prispevajo k njegovim knjižnicam in nudijo podporo prek forumov, vadnic in dokumentacije. To bogastvo virov zagotavlja, da imajo razvijalci dostop do pomoči in navodil pri reševanju izzivov spletnega strganja.