logo

Python tīmekļa kasīšanas apmācība

Tīmekļa skrāpēšana, datu iegūšanas process no vietnēm, ir kļuvusi par spēcīgu paņēmienu informācijas vākšanai no plašā interneta plašuma. Šajā apmācībā mēs izpētīsim dažādas Python bibliotēkas un moduļus, ko parasti izmanto tīmekļa skrāpēšanai, un izpētīsim, kāpēc Python 3 ir vēlamā izvēle šim uzdevumam.

Būtiskas pakotnes un rīki Python tīmekļa skrāpēšanai

Jaunākā versija Python , piedāvā bagātīgu rīku un bibliotēku kopumu, kas īpaši izstrādāts tīmekļa kopšanai, padarot efektīvāku un produktīvu datu izgūšanu no tīmekļa vienkāršāk nekā jebkad agrāk.



Satura rādītājs

Pieprasījumu modulis

Pieprasījumu bibliotēka tiek izmantota, lai veiktu HTTP pieprasījumus uz noteiktu URL, un tā atgriež atbildi. Python pieprasījumi nodrošina iebūvētas funkcijas gan pieprasījuma, gan atbildes pārvaldībai.

pip install requests>

Piemērs: Pieprasījuma iesniegšana

Python pieprasījumu modulim ir vairākas iebūvētas metodes, lai veiktu HTTP pieprasījumus uz norādīto URI, izmantojot GET, POST, PUT, PATCH vai HEAD pieprasījumus. HTTP pieprasījums ir paredzēts datu izgūšanai no norādītā URI vai datu nosūtīšanai uz serveri. Tas darbojas kā pieprasījuma-atbildes protokols starp klientu un serveri. Šeit mēs izmantosim GET pieprasījumu. The GET metode tiek izmantots, lai izgūtu informāciju no dotā servera, izmantojot doto URI. GET metode nosūta kodētu lietotāja informāciju, kas pievienota lapas pieprasījumam.



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

Izvade

masīvs Java valodā

Python pieprasa GET pieprasījumu

Lai iegūtu papildinformāciju, skatiet mūsu Python pieprasījumu apmācība .



Skaistās zupas bibliotēka

Skaistā zupa piedāvā dažas vienkāršas metodes un pitoniskās frāzes, lai vadītu, meklētu un mainītu parsēšanas koku: rīku komplekts dokumenta izpētei un vajadzīgā noņemšanai. Lai dokumentētu pieteikumu, nav nepieciešams daudz koda.

Beautiful Soup automātiski pārvērš ienākošos ierakstus par Unicode un izejošās veidlapas uz UTF-8. Jums nav jādomā par kodējumiem, ja vien dokumentā nav noteikts kodējums un Beautiful Soup nevar to uztvert. Tad jums vienkārši jāizvēlas oriģinālais kodējums. Skaista zupa atrodas virs slavenajiem Python parsētājiem, piemēram, LXML un HTML, ļaujot jums izmēģināt dažādas parsēšanas stratēģijas vai mainīt ātrumu, lai nodrošinātu elastību.

pip install beautifulsoup4>

Piemērs

  1. Bibliotēku importēšana: Kods importē pieprasījumu bibliotēku HTTP pieprasījumu veikšanai un BeautifulSoup klasi no bs4 bibliotēkas HTML parsēšanai.
  2. GET pieprasījuma noformēšana: Tas nosūta GET pieprasījumu uz “https://www.techcodeview.com”.
  3. Pārbauda statusa kodu: Tas izdrukā atbildes statusa kodu, parasti 200, lai gūtu panākumus.
  4. HTML parsēšana : atbildes HTML saturs tiek parsēts, izmantojot BeautifulSoup, un saglabāts mainīgajā zupā.
  5. Pretified HTML drukāšana: Tas izdrukā parsētā HTML satura izsmalcinātu versiju lasāmībai un analīzei.
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())>

Izvade

Python BeautifulSoup parsēšanas HTML

Elementu atrašana pēc klases

Tagad mēs vēlamies iegūt dažus noderīgus datus no HTML satura. Zupas objekts satur visus ligzdotās struktūras datus, kurus var programmatiski izvilkt. Vietnē, kuru vēlamies nokasīt, ir daudz teksta, tāpēc tagad nokasīsim visu šo saturu. Vispirms apskatīsim tīmekļa lapu, kuru vēlamies nokasīt.


Iepriekš redzamajā attēlā redzams, ka viss lapas saturs atrodas zem div ar klases ieraksta saturu. Mēs izmantosim atrašanas klasi. Šī klase atradīs norādīto tagu ar doto atribūtu. Mūsu gadījumā tas atradīs visu div, kam ir klase kā ieraksta saturs.

Mēs redzam, ka lapas saturs atrodas zem

tagu. Tagad mums ir jāatrod visi šajā klasē esošie p tagi. Mēs varam izmantotatrast_visu Skaistās zupas klase.

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

Izvade:

atrast_visu bs4

Lai iegūtu papildinformāciju, skatiet mūsu Python Skaistā zupa .

Selēns

Selēns ir populārs Python modulis, ko izmanto tīmekļa pārlūkprogrammu automatizēšanai. Tas ļauj izstrādātājiem programmatiski kontrolēt tīmekļa pārlūkprogrammas, ļaujot veikt tādus uzdevumus kā tīmekļa skrāpēšana, automatizēta testēšana un tīmekļa lietojumprogrammu mijiedarbība. Selēns atbalsta dažādas tīmekļa pārlūkprogrammas, tostarp Chrome, Firefox, Safari un Edge, padarot to par daudzpusīgu pārlūkprogrammas automatizācijas rīku.

Piemērs 1: Firefox

Šajā konkrētajā piemērā pārlūkprogramma tiek novirzīta uz Google meklēšanas lapu ar vaicājuma parametru geeksforgeeks. Pārlūkprogramma ielādēs šo lapu, un pēc tam mēs varēsim ar to programmatiski mijiedarboties, izmantojot Selenium. Šī mijiedarbība var ietvert tādus uzdevumus kā meklēšanas rezultātu izvilkšana, noklikšķināšana uz saitēm vai noteikta satura izņemšana no lapas.

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

Izvade

for-firefox

2. piemērs: pārlūkam Chrome

  1. Mēs importējam tīmekļa draivera moduli no Selenium bibliotēkas.
  2. Mēs norādām ceļu uz tīmekļa draivera izpildāmo failu. Jums ir jālejupielādē savai pārlūkprogrammai atbilstošais draiveris un jānorāda ceļš uz to. Šajā piemērā mēs izmantojam Chrome draiveri.
  3. Mēs izveidojam jaunu tīmekļa pārlūkprogrammas gadījumu, izmantojot webdriver.Chrome(), un kā argumentu nododam ceļu uz Chrome draivera izpildāmo failu.
  4. Mēs pārejam uz tīmekļa lapu, pārlūkprogrammas objektā izsaucot metodi get() un nododot tīmekļa lapas URL.
  5. Mēs iegūstam informāciju no tīmekļa lapas, izmantojot dažādas Selenium nodrošinātās metodes. Šajā piemērā mēs izgūstam lapas nosaukumu, izmantojot pārlūkprogrammas objekta virsraksta atribūtu.
  6. Visbeidzot, mēs aizveram pārlūkprogrammu, izmantojot quit() metodi.
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()>

Izvade

Lai iegūtu papildinformāciju, skatiet mūsu Python selēns .

Lxml

Python lxml modulis ir jaudīga bibliotēka XML un HTML dokumentu apstrādei. Tas nodrošina augstas veiktspējas XML un HTML parsēšanas iespējas, kā arī vienkāršu un Pythonic API. lxml tiek plaši izmantots Python tīmekļa skrāpēšanā tā ātruma, elastības un lietošanas vienkāršības dēļ.

pip install lxml>

Piemērs

Šeit ir vienkāršs piemērs, kas parāda, kā izmantot lxml moduli Python tīmekļa skrāpēšanai:

  1. Mēs importējam html moduli no lxml kopā ar pieprasījumu moduli HTTP pieprasījumu nosūtīšanai.
  2. Mēs definējam tās vietnes URL, kuru vēlamies nokasīt.
  3. Mēs nosūtām HTTP GET pieprasījumu vietnei, izmantojot funkciju requests.get() un izgūstam lapas HTML saturu.
  4. Mēs parsējam HTML saturu, izmantojot lxml funkciju html.fromstring(), kas atgriež HTML elementu koku.
  5. Mēs izmantojam XPath izteiksmes, lai no HTML koka iegūtu konkrētus elementus. Šajā gadījumā mēs izņemam visu teksta saturu (enkura) elementi lapā.
  6. Mēs atkārtojam izvilkto saišu nosaukumus un izdrukājam tos.
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)>

Izvade

More information...>

Urllib modulis

Python urllib modulis ir iebūvēta bibliotēka, kas nodrošina funkcijas darbam ar URL. Tas ļauj mijiedarboties ar tīmekļa lapām, ienesot vietrāžus URL (vienotos resursu meklētājus), atverot un nolasot datus no tiem, kā arī veicot citus ar URL saistītus uzdevumus, piemēram, kodēšanu un parsēšanu. Urllib ir pakotne, kas apkopo vairākus moduļus darbam ar URL, piemēram:

  • urllib.pieprasījums atvēršanai un lasīšanai.
  • urllib.parse URL parsēšanai
  • urllib.error izvirzītajiem izņēmumiem
  • urllib.robotparser robot.txt failu parsēšanai

Ja urllib jūsu vidē nav, izpildiet tālāk norādīto kodu, lai to instalētu.

pip install urllib3>

Piemērs

Šeit ir vienkāršs piemērs, kas parāda, kā izmantot moduli urllib, lai ielādētu tīmekļa lapas saturu:

  1. Mēs definējam tās tīmekļa lapas URL, kuru vēlamies ienest.
  2. Mēs izmantojam funkciju urllib.request.urlopen(), lai atvērtu URL un iegūtu atbildes objektu.
  3. Mēs nolasām atbildes objekta saturu, izmantojot metodi read().
  4. Tā kā saturs tiek atgriezts kā baiti, mēs to atšifrējam virknē, izmantojot metodi decode () ar kodējumu “utf-8”.
  5. Visbeidzot, mēs izdrukājam tīmekļa lapas HTML saturu.
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)>

Izvade

uutt

PyautoGUI

Python pyautogui modulis ir starpplatformu GUI automatizācijas bibliotēka, kas ļauj izstrādātājiem kontrolēt peli un tastatūru, lai automatizētu uzdevumus. Lai gan tas nav īpaši paredzēts tīmekļa skrāpēšanai, to var izmantot kopā ar citām tīmekļa kopēšanas bibliotēkām, piemēram, Selenium, lai mijiedarbotos ar tīmekļa lapām, kurās nepieciešama lietotāja ievade vai simulē cilvēka darbības.

pip3 install pyautogui>

Piemērs

Šajā piemērā pyautogui tiek izmantots, lai veiktu ritināšanu un ekrānuzņēmumu no meklēšanas rezultātu lapas, kas iegūta, meklēšanas ievades laukā ierakstot vaicājumu un noklikšķinot uz meklēšanas pogas, izmantojot Selēnu.

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

Izvade

Grafiks

Plānošanas modulis programmā Python ir vienkārša bibliotēka, kas ļauj ieplānot Python funkciju izpildi noteiktos intervālos. Tas ir īpaši noderīgi tīmekļa skrāpēšanā Python, kad jums regulāri ir jāizvāc dati no vietnes ar iepriekš noteiktiem intervāliem, piemēram, reizi stundā, dienā vai nedēļā.

Piemērs

  • Mēs importējam nepieciešamos moduļus: grafiku, laiku, pieprasījumus un BeautifulSoup no bs4 pakotnes.
  • Mēs definējam funkciju scrape_data(), kas veic tīmekļa nokasīšanas uzdevumu. Izmantojot šo funkciju, mēs nosūtām vietnei GET pieprasījumu (aizstājam “https://example.com” ar tās vietnes URL, kuru vēlaties nokasīt), parsējam HTML saturu, izmantojot BeautifulSoup, iegūstam vajadzīgos datus un izdrukājam to. .
  • Mēs ieplānojam funkcijas scrape_data() palaišanu katru stundu, izmantojot grafiku.every().hour.do(scrape_data).
  • Mēs ievadām galveno cilpu, kas nepārtraukti pārbauda neapstiprinātos ieplānotos uzdevumus, izmantojot grafiku.run_pending(), un starp iterācijām guļ 1 sekundi, lai cilpa nepatērē pārāk daudz CPU.
Python
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)>

Izvade

Kāpēc Python3 tīmekļa skrāpēšanai?

Python popularitāte tīmekļa skrāpēšanā ir saistīta ar vairākiem faktoriem:

  1. Lietošanas ērtums : Python tīrā un lasāmā sintakse ļauj viegli saprast un rakstīt kodu pat iesācējiem. Šī vienkāršība paātrina izstrādes procesu un samazina tīmekļa skrāpēšanas uzdevumu apguves līkni.
  2. Bagātīga ekosistēma : Python lepojas ar plašu bibliotēku un ietvaru ekosistēmu, kas pielāgotas tīmekļa kopēšanai. Bibliotēkas, piemēram, BeautifulSoup, Scrapy un Requests, vienkāršo HTML parsēšanas procesu, padarot datu ieguvi vienkāršu.
  3. Daudzpusība : Python ir daudzpusīga valoda, ko var izmantot dažādiem uzdevumiem, ne tikai tīmeklī. Tā elastība ļauj izstrādātājiem nemanāmi integrēt tīmekļa skrāpēšanu lielākos projektos, piemēram, datu analīzē, mašīnmācībā vai tīmekļa izstrādē.
  4. Kopienas atbalsts : Python ir liela un aktīva izstrādātāju kopiena, kas sniedz ieguldījumu tās bibliotēkās un sniedz atbalstu, izmantojot forumus, apmācības un dokumentāciju. Šis bagātīgais resurss nodrošina, ka izstrādātājiem ir pieejama palīdzība un norādījumi, risinot tīmekļa kopēšanas problēmas.