Nettskraping, prosessen med å trekke ut data fra nettsteder, har dukket opp som en kraftig teknikk for å samle informasjon fra det store området av internett. I denne opplæringen vil vi utforske ulike Python-biblioteker og -moduler som vanligvis brukes til nettskraping, og fordype oss i hvorfor Python 3 er det foretrukne valget for denne oppgaven.
Viktige pakker og verktøy for Python Web Scraping
Den siste versjonen av Python , tilbyr et rikt sett med verktøy og biblioteker spesielt utviklet for nettskraping, noe som gjør det enklere enn noen gang å hente data fra nettet effektivt og effektivt.
Innholdsfortegnelse
- Forespørselsmodul
- BeautifulSoup Library
- Selen
- Lxml
- Urllib-modul
- PyautoGUI
- Rute
- Hvorfor Python Web Scraping?
Forespørsler Modul
Forespørselsbiblioteket brukes til å lage HTTP-forespørsler til en bestemt URL og returnerer svaret. Python-forespørsler gir innebygde funksjoner for å administrere både forespørselen og svaret.
pip install requests>
Eksempel: Forespørsel
Python-forespørselsmodulen har flere innebygde metoder for å lage HTTP-forespørsler til spesifisert URI ved å bruke GET-, POST-, PUT-, PATCH- eller HEAD-forespørsler. En HTTP-forespørsel er ment å enten hente data fra en spesifisert URI eller å sende data til en server. Den fungerer som en forespørsel-svar-protokoll mellom en klient og en server. Her skal vi bruke GET-forespørselen. De GET metoden brukes til å hente informasjon fra den gitte serveren ved hjelp av en gitt URI. GET-metoden sender den kodede brukerinformasjonen som er lagt til sideforespørselen.
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)> Produksjon

For mer informasjon, se vår Opplæring for Python-forespørsler .
BeautifulSoup Library
Beautiful Soup gir noen få enkle metoder og pytoniske fraser for å veilede, søke og endre et parse-tre: et verktøysett for å studere et dokument og fjerne det du trenger. Det krever ikke mye kode for å dokumentere en søknad.
Beautiful Soup konverterer automatisk innkommende poster til Unicode og utgående skjemaer til UTF-8. Du trenger ikke tenke på kodinger med mindre dokumentet ikke definerer en koding, og Beautiful Soup ikke kan fange en. Da er det bare å velge den originale kodingen. Beautiful Soup ligger på toppen av kjente Python-parsere som LXML og HTML, slik at du kan prøve forskjellige analyseringsstrategier eller bytte hastighet for fleksibilitet.
pip install beautifulsoup4>
Eksempel
- Importere biblioteker: Koden importerer forespørselsbiblioteket for å lage HTTP-forespørsler og BeautifulSoup-klassen fra bs4-biblioteket for å analysere HTML.
- Gjør en GET-forespørsel: Den sender en GET-forespørsel til ‘https://www.techcodeview.com
- Sjekker statuskode: Den skriver ut statuskoden for svaret, vanligvis 200 for suksess.
- Parsing HTML : HTML-innholdet i responsen analyseres ved hjelp av BeautifulSoup og lagres i den variable suppen.
- Skrive ut den pretified HTML: Den skriver ut den forfinede versjonen av det analyserte HTML-innholdet for lesbarhet og analyse.
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())> Produksjon

Finne elementer etter klasse
Nå ønsker vi å trekke ut noen nyttige data fra HTML-innholdet. Suppeobjektet inneholder alle dataene i den nestede strukturen som kan trekkes ut programmatisk. Nettstedet vi ønsker å skrape inneholder mye tekst, så la oss nå skrape alt dette innholdet. Først, la oss inspisere nettsiden vi ønsker å skrape.
liste i java
I bildet ovenfor kan vi se at alt innholdet på siden er under div med klasseinngang-innhold. Vi skal bruke finnklassen. Denne klassen vil finne den gitte taggen med det gitte attributtet. I vårt tilfelle vil den finne at alle div har klasse som oppføring-innhold.
Vi kan se at innholdet på siden er under
stikkord. Nå må vi finne alle p-taggene som finnes i denne klassen. Vi kan brukefinn_alle klasse av 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)> Produksjon:
påskeegg i Android

For mer informasjon, se vår Python BeautifulSoup .
Selen
Selen er en populær Python-modul som brukes til å automatisere nettlesere. Det lar utviklere kontrollere nettlesere programmatisk, noe som muliggjør oppgaver som nettskraping, automatisert testing og interaksjon med nettapplikasjoner. Selenium støtter ulike nettlesere, inkludert Chrome, Firefox, Safari og Edge, noe som gjør det til et allsidig verktøy for nettleserautomatisering.
Eksempel 1: For Firefox
I dette spesifikke eksemplet dirigerer vi nettleseren til Googles søkeside med søkeparameteren geeksforgeeks. Nettleseren vil laste denne siden, og vi kan deretter fortsette å samhandle med den programmatisk ved hjelp av Selenium. Denne interaksjonen kan innebære oppgaver som å trekke ut søkeresultater, klikke på lenker eller skrape spesifikt innhold fra siden.
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')> Produksjon

Eksempel 2: For Chrome
- Vi importerer webdrivermodulen fra Selenium-biblioteket.
- Vi spesifiserer banen til den kjørbare webdriveren. Du må laste ned den riktige driveren for nettleseren din og oppgi banen til den. I dette eksemplet bruker vi Chrome-driveren.
- Vi oppretter en ny forekomst av nettleseren ved å bruke webdriver.Chrome() og sender banen til Chrome-driveren som et argument.
- Vi navigerer til en nettside ved å kalle get()-metoden på nettleserobjektet og sende URL-en til nettsiden.
- Vi trekker ut informasjon fra nettsiden ved hjelp av ulike metoder levert av Selenium. I dette eksemplet henter vi sidetittelen ved å bruke tittelattributtet til nettleserobjektet.
- Til slutt lukker vi nettleseren ved å bruke quit()-metoden.
# 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()>
Produksjon

For mer informasjon, se vår Python Selen .
Lxml
Lxml-modulen i Python er et kraftig bibliotek for behandling av XML- og HTML-dokumenter. Det gir en høyytelses XML- og HTML-parsing-funksjoner sammen med en enkel og Pythonic API. lxml er mye brukt i Python-nettskraping på grunn av hastigheten, fleksibiliteten og brukervennligheten.
pip install lxml>
Eksempel
Her er et enkelt eksempel som viser hvordan du bruker lxml-modulen for Python-nettskraping:
- Vi importerer html-modulen fra lxml sammen med forespørselsmodulen for å sende HTTP-forespørsler.
- Vi definerer URL-en til nettstedet vi ønsker å skrape.
- Vi sender en HTTP GET-forespørsel til nettstedet ved å bruke requests.get()-funksjonen og henter HTML-innholdet på siden.
- Vi analyserer HTML-innholdet ved å bruke funksjonen html.fromstring() fra lxml, som returnerer et HTML-elementtre.
- Vi bruker XPath-uttrykk for å trekke ut spesifikke elementer fra HTML-treet. I dette tilfellet trekker vi ut tekstinnholdet til alle (anker)elementer på siden.
- Vi gjentar de utpakkede koblingstitlene og skriver dem ut.
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)> Produksjon
More information...>
Urllib-modul
Urllib-modulen i Python er et innebygd bibliotek som gir funksjoner for arbeid med URL-er. Den lar deg samhandle med nettsider ved å hente URL-er (Uniform Resource Locators), åpne og lese data fra dem og utføre andre URL-relaterte oppgaver som koding og parsing. Urllib er en pakke som samler flere moduler for arbeid med URL-er, for eksempel:
- urllib.request for åpning og lesing.
- urllib.parse for å analysere URL-er
- urllib.error for de oppgitte unntakene
- urllib.robotparser for å analysere robot.txt-filer
Hvis urllib ikke er til stede i miljøet ditt, kjør koden nedenfor for å installere den.
pip install urllib3>
Eksempel
Her er et enkelt eksempel som viser hvordan du bruker urllib-modulen for å hente innholdet på en nettside:
- Vi definerer URL-en til nettsiden vi ønsker å hente.
- Vi bruker funksjonen urllib.request.urlopen() for å åpne URL-en og få et responsobjekt.
- Vi leser innholdet i responsobjektet ved å bruke read()-metoden.
- Siden innholdet returneres som bytes, dekoder vi det til en streng ved å bruke decode()-metoden med 'utf-8'-koding.
- Til slutt skriver vi ut HTML-innholdet på nettsiden.
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)> Produksjon

peanøtt vs jordnøtt
PyautoGUI
Pyautogui-modulen i Python er et GUI-automatiseringsbibliotek på tvers av plattformer som gjør det mulig for utviklere å kontrollere musen og tastaturet for å automatisere oppgaver. Selv om det ikke er spesielt designet for nettskraping, kan det brukes sammen med andre nettskrapingsbiblioteker som Selenium for å samhandle med nettsider som krever brukerinndata eller simulere menneskelige handlinger.
pip3 install pyautogui>
Eksempel
I dette eksemplet brukes pyautogui til å rulle og ta et skjermbilde av søkeresultatsiden oppnådd ved å skrive et søk i søkeinndatafeltet og klikke på søkeknappen ved å bruke Selenium.
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()>
Produksjon

Rute
Planleggingsmodulen i Python er et enkelt bibliotek som lar deg planlegge Python-funksjoner til å kjøre med spesifiserte intervaller. Det er spesielt nyttig i nettskraping i Python når du regelmessig trenger å skrape data fra et nettsted med forhåndsdefinerte intervaller, for eksempel hver time, daglig eller ukentlig.
Eksempel
- Vi importerer de nødvendige modulene: tidsplan, tid, forespørsler og BeautifulSoup fra bs4-pakken.
- Vi definerer en funksjon scrape_data() som utfører web-skraping-oppgaven. Inne i denne funksjonen sender vi en GET-forespørsel til et nettsted (erstatt 'https://example.com' med URL-en til nettstedet du vil skrape), analyserer HTML-innholdet ved hjelp av BeautifulSoup, trekker ut de ønskede dataene og skriver det ut .
- Vi planlegger at scrape_data()-funksjonen skal kjøres hver time ved å bruke schedule.every().hour.do(scrape_data).
- Vi går inn i en hovedsløyfe som kontinuerlig sjekker for ventende planlagte oppgaver ved å bruke schedule.run_pending() og sover i 1 sekund mellom iterasjonene for å forhindre at løkken bruker for mye CPU.
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)> Produksjon

Hvorfor Python3 for nettskraping?
Pythons popularitet for nettskraping stammer fra flere faktorer:
- Brukervennlighet : Pythons rene og lesbare syntaks gjør det enkelt å forstå og skrive kode, selv for nybegynnere. Denne enkelheten akselererer utviklingsprosessen og reduserer læringskurven for nettskrapingsoppgaver.
- Rikt økosystem : Python har et stort økosystem av biblioteker og rammeverk skreddersydd for nettskraping. Biblioteker som BeautifulSoup, Scrapy og Requests forenkler prosessen med å analysere HTML, noe som gjør datautvinning til en lek.
- Allsidighet : Python er et allsidig språk som kan brukes til et bredt spekter av oppgaver utover nettskraping. Fleksibiliteten tillater utviklere å integrere nettskraping sømløst i større prosjekter, for eksempel dataanalyse, maskinlæring eller nettutvikling.
- Fellesskapsstøtte : Python har et stort og aktivt fellesskap av utviklere som bidrar til bibliotekene og gir støtte gjennom fora, opplæringsprogrammer og dokumentasjon. Dette vell av ressurser sikrer at utviklere har tilgang til assistanse og veiledning når de skal takle utfordringer med nettskraping.