logo

Python žiniatinklio grandymo pamoka

Žiniatinklio išgryninimas, duomenų išgavimo iš svetainių procesas, tapo galinga technika, leidžiančia rinkti informaciją iš didžiulės interneto erdvės. Šioje pamokoje išnagrinėsime įvairias Python bibliotekas ir modulius, dažniausiai naudojamus žiniatinklio rinkimui, ir išsiaiškinsime, kodėl Python 3 yra tinkamiausias pasirinkimas šiai užduočiai atlikti.

Esminiai paketai ir įrankiai, skirti „Python“ žiniatinklio rinkimui

Naujausia versija Python , siūlo gausų įrankių ir bibliotekų rinkinį, specialiai sukurtą žiniatinklio rinkimui, todėl lengviau nei bet kada anksčiau efektyviai ir efektyviai gauti duomenis iš žiniatinklio.



Turinys

Prašymų modulis

Užklausų biblioteka naudojama HTTP užklausoms pateikti į konkretų URL ir grąžina atsakymą. Python užklausos suteikia integruotas funkcijas, skirtas valdyti užklausą ir atsakymą.

pip install requests>

Pavyzdys: pateikti užklausą

Python užklausų modulyje yra keli integruoti metodai, leidžiantys pateikti HTTP užklausas į nurodytą URI naudojant GET, POST, PUT, PATCH arba HEAD užklausas. HTTP užklausa skirta gauti duomenis iš nurodyto URI arba perkelti duomenis į serverį. Jis veikia kaip užklausų-atsakymų protokolas tarp kliento ir serverio. Čia mes naudosime GET užklausą. The GET metodas naudojamas informacijai iš nurodyto serverio gauti naudojant nurodytą URI. GET metodas siunčia užkoduotą vartotojo informaciją, pridėtą prie puslapio užklausos.



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

Išvestis

Python užklausos pateikia GET užklausą

ne

Daugiau informacijos rasite mūsų Python užklausų pamoka .



Gražios sriubos biblioteka

„Beautiful Soup“ pateikia keletą paprastų metodų ir pitoniškų frazių, kaip vadovautis, ieškoti ir keisti analizavimo medį: įrankių rinkinį, skirtą dokumentui ištirti ir tai, ko jums reikia. Programai dokumentuoti nereikia daug kodo.

Graži sriuba automatiškai konvertuoja gaunamus įrašus į Unicode, o išsiunčiamas formas į UTF-8. Jums nereikia galvoti apie koduotes, nebent dokumentas neapibrėžia kodavimo, o „Beautiful Soup“ negali jos sugauti. Tada jums tereikia pasirinkti originalią kodavimą. Graži sriuba yra ant garsių Python analizatorių, tokių kaip LXML ir HTML, todėl galite išbandyti skirtingas analizavimo strategijas arba keisti greitį, kad būtų lankstesnis.

pip install beautifulsoup4>

Pavyzdys

  1. Bibliotekų importavimas: Kodas importuoja užklausų biblioteką HTTP užklausoms teikti ir BeautifulSoup klasę iš bs4 bibliotekos, kad būtų galima analizuoti HTML.
  2. GET užklausos pateikimas: Jis siunčia GET užklausą adresu https://www.techcodeview.com
  3. Tikrinamas būsenos kodas: Jis išspausdina atsakymo būsenos kodą, paprastai 200 sėkmingam.
  4. HTML analizavimas : atsakymo HTML turinys išanalizuojamas naudojant BeautifulSoup ir saugomas kintamajame sriuboje.
  5. Pretifikuoto HTML spausdinimas: Jis spausdina gražinamą analizuoto HTML turinio versiją, kad būtų galima ją skaityti ir analizuoti.
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())>

Išvestis

Python BeautifulSoup analizuojantis HTML

Elementų paieška pagal klasę

Dabar norėtume iš HTML turinio išgauti keletą naudingų duomenų. Sriubos objekte yra visi įdėtosios struktūros duomenys, kuriuos galima programiškai išgauti. Svetainėje, kurią norime nukopijuoti, yra daug teksto, todėl dabar nubraukime visą tą turinį. Pirmiausia apžiūrėkime tinklalapį, kurį norime nubraukti.

reakcijos lentelė


Aukščiau esančiame paveikslėlyje matome, kad visas puslapio turinys yra po div su klasės įrašu-turiniu. Naudosime paieškos klasę. Ši klasė suras nurodytą žymą su nurodytu atributu. Mūsų atveju jis ras visus div, kurių klasė yra įrašo turinys.

Matome, kad puslapio turinys yra po

žyma. Dabar turime rasti visas p žymes, esančias šioje klasėje. Mes galime naudotirasti_viską „BeautifulSoup“ klasė.

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

Išvestis:

rasti_viską bs4

Daugiau informacijos rasite mūsų Python graži sriuba .

Selenas

Selenas yra populiarus Python modulis, naudojamas interneto naršyklėms automatizuoti. Tai leidžia kūrėjams programiškai valdyti žiniatinklio naršykles, įgalinant tokias užduotis kaip žiniatinklio rinkimas, automatinis testavimas ir žiniatinklio programų sąveika. „Selenium“ palaiko įvairias žiniatinklio naršykles, įskaitant „Chrome“, „Firefox“, „Safari“ ir „Edge“, todėl tai yra universalus naršyklės automatizavimo įrankis.

polimorfizmas Java

Pavyzdys 1: „Firefox“.

Šiame konkrečiame pavyzdyje naršyklę nukreipiame į „Google“ paieškos puslapį naudodami užklausos parametrą „geeksforgeeks“. Naršyklė įkels šį puslapį, o mes galėsime su juo programiškai sąveikauti naudodami Selenium. Ši sąveika gali apimti tokias užduotis kaip paieškos rezultatų ištraukimas, nuorodų spustelėjimas arba konkretaus turinio išgryninimas iš puslapio.

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

Išvestis

for-firefox

2 pavyzdys: „Chrome“.

  1. Mes importuojame žiniatinklio tvarkyklės modulį iš Selenium bibliotekos.
  2. Mes nurodome kelią į žiniatinklio tvarkyklės vykdomąjį failą. Turite atsisiųsti atitinkamą naršyklės tvarkyklę ir nurodyti kelią iki jos. Šiame pavyzdyje naudojame „Chrome“ tvarkyklę.
  3. Sukuriame naują žiniatinklio naršyklės egzempliorių naudodami webdriver.Chrome() ir kaip argumentą perduodame kelią į vykdomąjį „Chrome“ tvarkyklės failą.
  4. Einame į tinklalapį, naršyklės objekte iškviečiame get() metodą ir perduodame tinklalapio URL.
  5. Informaciją iš tinklalapio ištraukiame įvairiais Selenium teikiamais metodais. Šiame pavyzdyje puslapio pavadinimą gauname naudodami naršyklės objekto pavadinimo atributą.
  6. Galiausiai uždarome naršyklę naudodami quit() metodą.
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()>

Išvestis

Daugiau informacijos rasite mūsų Python selenas .

mašininis mokymasis ir tipai

Lxml

Python lxml modulis yra galinga biblioteka, skirta XML ir HTML dokumentams apdoroti. Ji suteikia didelio našumo XML ir HTML analizavimo galimybes kartu su paprasta ir Pythonic API. lxml yra plačiai naudojamas Python žiniatinklio grandymui dėl savo greičio, lankstumo ir naudojimo paprastumo.

pip install lxml>

Pavyzdys

Štai paprastas pavyzdys, parodantis, kaip naudoti lxml modulį Python žiniatinklio grandymui:

  1. Mes importuojame html modulį iš lxml kartu su užklausų moduliu, skirtu HTTP užklausoms siųsti.
  2. Mes nustatome svetainės, kurią norime nuskaityti, URL.
  3. Mes siunčiame HTTP GET užklausą į svetainę naudodami requests.get() funkciją ir nuskaitome puslapio HTML turinį.
  4. HTML turinį analizuojame naudodami funkciją html.fromstring() iš lxml, kuri grąžina HTML elementų medį.
  5. Mes naudojame XPath išraiškas, kad ištrauktume konkrečius elementus iš HTML medžio. Šiuo atveju išgauname visų teksto turinį (inkaro) elementai puslapyje.
  6. Pakartojame ištrauktų nuorodų pavadinimus ir juos išspausdiname.
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)>

Išvestis

More information...>

Urllib modulis

Python urllib modulis yra integruota biblioteka, teikianti funkcijas, skirtas darbui su URL. Tai leidžia sąveikauti su tinklalapiais gaunant URL (vienodus išteklių lokatorius), atidarant ir nuskaitant iš jų duomenis bei atliekant kitas su URL susijusias užduotis, pvz., kodavimą ir analizavimą. Urllib yra paketas, kuriame renkami keli moduliai, skirti dirbti su URL, pavyzdžiui:

  • urllib.užklausa atidaryti ir skaityti.
  • urllib.parse URL analizei
  • urllib.klaida dėl iškeltų išimčių
  • urllib.robotparser, skirtas robot.txt failams analizuoti

Jei urllib jūsų aplinkoje nėra, vykdykite toliau pateiktą kodą, kad jį įdiegtumėte.

pip install urllib3>

Pavyzdys

Štai paprastas pavyzdys, rodantis, kaip naudoti urllib modulį tinklalapio turiniui gauti:

  1. Mes nustatome tinklalapio, kurį norime gauti, URL.
  2. Mes naudojame funkciją urllib.request.urlopen() norėdami atidaryti URL ir gauti atsakymo objektą.
  3. Atsakymo objekto turinį skaitome naudodami read() metodą.
  4. Kadangi turinys grąžinamas kaip baitai, mes iškoduojame jį į eilutę naudodami decode() metodą su „utf-8“ koduote.
  5. Galiausiai išspausdiname tinklalapio HTML turinį.
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)>

Išvestis

uutt

PyautoGUI

Python pyautogui modulis yra kelių platformų GUI automatizavimo biblioteka, leidžianti kūrėjams valdyti pelę ir klaviatūrą, kad būtų galima automatizuoti užduotis. Nors jis nėra specialiai sukurtas žiniatinklio rinkimui, jis gali būti naudojamas kartu su kitomis žiniatinklio rinkimo bibliotekomis, tokiomis kaip Selenium, kad būtų galima sąveikauti su tinklalapiais, kuriems reikia vartotojo įvesties arba imituoti žmogaus veiksmus.

java null tikrinimas
pip3 install pyautogui>

Pavyzdys

Šiame pavyzdyje pyautogui naudojamas slinkti ir padaryti paieškos rezultatų puslapio ekrano kopiją, gautą į paieškos įvesties lauką įvedus užklausą ir spustelėjus paieškos mygtuką naudojant seleną.

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

Išvestis

Tvarkaraštis

„Python“ tvarkaraščio modulis yra paprasta biblioteka, leidžianti suplanuoti „Python“ funkcijų vykdymą nurodytais intervalais. Tai ypač naudinga naudojant „Python“ žiniatinklį, kai reikia reguliariai rinkti duomenis iš svetainės iš anksto nustatytais intervalais, pvz., kas valandą, kasdien arba kas savaitę.

Pavyzdys

  • Iš bs4 paketo importuojame reikiamus modulius: tvarkaraštį, laiką, užklausas ir BeautifulSoup.
  • Mes apibrėžiame funkciją scrape_data(), kuri atlieka žiniatinklio grandymo užduotį. Naudodami šią funkciją, siunčiame GET užklausą į svetainę (pakeiskite „https://example.com“ svetainės, kurią norite nuskaityti, URL), išanalizuojame HTML turinį naudodami „BeautifulSoup“, išgauname norimus duomenis ir išspausdiname. .
  • Suplanuojame, kad funkcija scrape_data() būtų paleista kas valandą, naudodami schedule.every().hour.do(scrape_data).
  • Įeiname į pagrindinę kilpą, kuri nuolat tikrina laukiančias suplanuotas užduotis, naudojant schedule.run_pending() ir tarp iteracijų miega 1 sekundę, kad ciklas nevartotų per daug procesoriaus.
Python
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)>

Išvestis

Kodėl „Python3“ skirtas žiniatinklio išgryninimui?

Python populiarumas žiniatinklio grandymo srityje kyla dėl kelių veiksnių:

  1. Naudojimo paprastumas : Švari ir skaitoma Python sintaksė leidžia lengvai suprasti ir rašyti kodą net pradedantiesiems. Šis paprastumas paspartina kūrimo procesą ir sumažina žiniatinklio nuskaitymo užduočių mokymosi kreivę.
  2. Turtinga ekosistema : „Python“ gali pasigirti didžiule bibliotekų ir sistemų, pritaikytų žiniatinklio rinkimui, ekosistema. Bibliotekos, pvz., „BeautifulSoup“, „Scrapy“ ir „Requests“, supaprastina HTML analizavimo procesą, todėl duomenų išgavimas tampa lengvas.
  3. Universalumas : Python yra universali kalba, kurią galima naudoti įvairioms užduotims atlikti, ne tik žiniatinklio rinkimui. Dėl jo lankstumo kūrėjai gali sklandžiai integruoti žiniatinklio rinkimą į didesnius projektus, tokius kaip duomenų analizė, mašininis mokymasis ar žiniatinklio kūrimas.
  4. Bendruomenės parama : Python turi didelę ir aktyvią kūrėjų bendruomenę, kuri prisideda prie jos bibliotekų ir teikia paramą per forumus, mokymo programas ir dokumentus. Šie ištekliai užtikrina, kad kūrėjai, spręsdami žiniatinklio rinkimo problemas, turės prieigą prie pagalbos ir patarimų.