Webskrabning, processen med at udtrække data fra websteder, er dukket op som en kraftfuld teknik til at indsamle information fra internettets store udstrækning. I denne vejledning vil vi udforske forskellige Python-biblioteker og -moduler, der almindeligvis bruges til web-skrabning, og dykke ned i, hvorfor Python 3 er det foretrukne valg til denne opgave.
Væsentlige pakker og værktøjer til Python Web Scraping
Den seneste version af Python , tilbyder et rigt sæt værktøjer og biblioteker, der er specielt designet til web-skrabning, hvilket gør det nemmere end nogensinde før at hente data fra nettet effektivt og effektivt.
Indholdsfortegnelse
- Anmodningsmodul
- Smuksuppebibliotek
- Selen
- Lxml
- Urllib modul
- PyautoGUI
- Tidsplan
- Hvorfor Python Web Scraping?
Anmodningsmodul
Anmodningsbiblioteket bruges til at lave HTTP-anmodninger til en specifik URL og returnerer svaret. Python-anmodninger giver indbyggede funktioner til styring af både anmodningen og svaret.
pip install requests>
Eksempel: Indgivelse af en anmodning
Python-anmodningsmodulet har flere indbyggede metoder til at lave HTTP-anmodninger til specificeret URI ved hjælp af GET-, POST-, PUT-, PATCH- eller HEAD-anmodninger. En HTTP-anmodning er beregnet til enten at hente data fra en specificeret URI eller at pushe data til en server. Det fungerer som en anmodning-svar-protokol mellem en klient og en server. Her vil vi bruge GET-anmodningen. Det GET metode bruges til at hente information fra den givne server ved hjælp af en given URI. GET-metoden sender den kodede brugerinformation, der er tilføjet sideanmodningen.
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)> Produktion

For mere information, se vores Tutorial til Python-anmodninger .
Smuksuppebibliotek
Beautiful Soup giver et par enkle metoder og pytoniske sætninger til at guide, søge og ændre et parsetræ: et værktøjssæt til at studere et dokument og fjerne det, du har brug for. Det kræver ikke meget kode at dokumentere en ansøgning.
Beautiful Soup konverterer automatisk indgående poster til Unicode og udgående formularer til UTF-8. Du behøver ikke tænke på kodninger, medmindre dokumentet ikke definerer en kodning, og Beautiful Soup kan ikke fange en. Så skal du bare vælge den originale kodning. Beautiful Soup sidder oven på berømte Python-parsere som LXML og HTML, hvilket giver dig mulighed for at prøve forskellige parsing-strategier eller bytte hastighed for fleksibilitet.
pip install beautifulsoup4>
Eksempel
- Import af biblioteker: Koden importerer anmodningsbiblioteket til at lave HTTP-anmodninger og BeautifulSoup-klassen fra bs4-biblioteket til at parse HTML.
- Sådan laver du en GET-anmodning: Den sender en GET-anmodning til 'https://www.techcodeview.com
- Kontrol af statuskode: Den udskriver statuskoden for svaret, typisk 200 for succes.
- Parsing af HTML : HTML-indholdet af svaret parses ved hjælp af BeautifulSoup og gemmes i den variable suppe.
- Udskrivning af den prætificerede HTML: Den udskriver den smukke version af det parsede HTML-indhold til læsbarhed 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())> Produktion

Find elementer efter klasse
Nu vil vi gerne udtrække nogle nyttige data fra HTML-indholdet. Suppeobjektet indeholder alle data i den indlejrede struktur, som kan udtrækkes programmatisk. Hjemmesiden, vi vil skrabe, indeholder en masse tekst, så lad os nu skrabe alt det indhold. Lad os først inspicere den webside, vi vil skrabe.
quicksort
På ovenstående billede kan vi se, at alt indholdet på siden er under div med klasseindgang-indhold. Vi vil bruge find-klassen. Denne klasse finder det givne tag med den givne attribut. I vores tilfælde vil den finde alle de div, der har klasse som entry-indhold.
Vi kan se, at indholdet på siden er under
tag. Nu skal vi finde alle de p-tags, der findes i denne klasse. Vi kan brugefind_alle klasse af 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)> Produktion:
"hvad er forskellen mellem en løve og en tiger"

For mere information, se vores Python smuk suppe .
Selen
Selen er et populært Python-modul, der bruges til at automatisere webbrowsere. Det giver udviklere mulighed for at styre webbrowsere programmatisk, hvilket muliggør opgaver såsom web-skrabning, automatiseret test og interaktion med webapplikationer. Selenium understøtter forskellige webbrowsere, herunder Chrome, Firefox, Safari og Edge, hvilket gør det til et alsidigt værktøj til browserautomatisering.
Eksempel 1: Til Firefox
I dette specifikke eksempel dirigerer vi browseren til Google-søgesiden med forespørgselsparameteren geeksforgeeks. Browseren indlæser denne side, og vi kan derefter fortsætte med at interagere med den programmatisk ved hjælp af Selenium. Denne interaktion kan involvere opgaver som at udtrække søgeresultater, klikke på links eller skrabe specifikt indhold 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')> Produktion

Eksempel 2: Til Chrome
- Vi importerer webdriver-modulet fra Selenium-biblioteket.
- Vi angiver stien til den eksekverbare webdriver. Du skal downloade den relevante driver til din browser og angive stien til den. I dette eksempel bruger vi Chrome-driveren.
- Vi opretter en ny forekomst af webbrowseren ved hjælp af webdriver.Chrome() og videregiver stien til den eksekverbare Chrome-driver som et argument.
- Vi navigerer til en webside ved at kalde get()-metoden på browserobjektet og videregive websidens URL.
- Vi udtrækker information fra websiden ved hjælp af forskellige metoder leveret af Selenium. I dette eksempel henter vi sidetitlen ved hjælp af title-attributten for browserobjektet.
- Til sidst lukker vi browseren ved hjælp af 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()>
Produktion

For mere information, se vores Python Selen .
Lxml
Lxml-modulet i Python er et kraftfuldt bibliotek til behandling af XML- og HTML-dokumenter. Det giver en højtydende XML- og HTML-parsing-funktioner sammen med en enkel og Pythonic API. lxml er meget brugt i Python-webskrabning på grund af dets hastighed, fleksibilitet og brugervenlighed.
pip install lxml>
Eksempel
Her er et simpelt eksempel, der viser, hvordan man bruger lxml-modulet til Python-webskrabning:
- Vi importerer html-modulet fra lxml sammen med anmodningsmodulet til at sende HTTP-anmodninger.
- Vi definerer URL'en på den hjemmeside, vi ønsker at skrabe.
- Vi sender en HTTP GET-anmodning til webstedet ved hjælp af funktionen requests.get() og henter HTML-indholdet på siden.
- Vi analyserer HTML-indholdet ved hjælp af html.fromstring()-funktionen fra lxml, som returnerer et HTML-elementtræ.
- Vi bruger XPath-udtryk til at udtrække specifikke elementer fra HTML-træet. I dette tilfælde udtrækker vi tekstindholdet af alle (anker)elementer på siden.
- Vi gentager de udtrukne linktitler og printer dem ud.
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)> Produktion
More information...>
Urllib modul
Urllib-modulet i Python er et indbygget bibliotek, der giver funktioner til at arbejde med URL'er. Det giver dig mulighed for at interagere med websider ved at hente URL'er (Uniform Resource Locators), åbne og læse data fra dem og udføre andre URL-relaterede opgaver som kodning og parsing. Urllib er en pakke, der samler flere moduler til at arbejde med URL'er, såsom:
- urllib.request til åbning og læsning.
- urllib.parse til at analysere URL'er
- urllib.error for de rejste undtagelser
- urllib.robotparser til at parse robot.txt-filer
Hvis urllib ikke er til stede i dit miljø, skal du udføre nedenstående kode for at installere det.
pip install urllib3>
Eksempel
Her er et simpelt eksempel, der viser, hvordan man bruger urllib-modulet til at hente indholdet af en webside:
- Vi definerer URL'en på den webside, vi ønsker at hente.
- Vi bruger urllib.request.urlopen()-funktionen til at åbne URL'en og få et svarobjekt.
- Vi læser indholdet af responsobjektet ved hjælp af read() metoden.
- Da indholdet returneres som bytes, afkoder vi det til en streng ved hjælp af decode()-metoden med 'utf-8'-kodning.
- Til sidst udskriver vi HTML-indholdet på websiden.
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)> Produktion

gimp erstatte farve
PyautoGUI
Pyautogui-modulet i Python er et GUI-automatiseringsbibliotek på tværs af platforme, der gør det muligt for udviklere at styre musen og tastaturet for at automatisere opgaver. Selvom det ikke er specifikt designet til web-skrabning, kan det bruges sammen med andre web-skrabningsbiblioteker som Selenium til at interagere med websider, der kræver brugerinput eller simulere menneskelige handlinger.
pip3 install pyautogui>
Eksempel
I dette eksempel bruges pyautogui til at udføre rulning og tage et skærmbillede af søgeresultatsiden opnået ved at skrive en forespørgsel i søgeindtastningsfeltet og klikke på søgeknappen ved hjælp af 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()>
Produktion

Tidsplan
Skemamodulet i Python er et simpelt bibliotek, der giver dig mulighed for at planlægge Python-funktioner til at køre med bestemte intervaller. Det er især nyttigt til web-skrabning i Python, når du regelmæssigt skal skrabe data fra et websted med foruddefinerede intervaller, såsom hver time, dagligt eller ugentligt.
Eksempel
- Vi importerer de nødvendige moduler: tidsplan, tid, anmodninger og BeautifulSoup fra bs4-pakken.
- Vi definerer en funktion scrape_data(), der udfører web-skrabeopgaven. Inde i denne funktion sender vi en GET-anmodning til et websted (erstat 'https://example.com' med URL'en på det websted, du vil skrabe), analyserer HTML-indholdet ved hjælp af BeautifulSoup, udtrækker de ønskede data og udskriver det .
- Vi planlægger funktionen scrape_data() til at køre hver time ved hjælp af schedule.every().hour.do(scrape_data).
- Vi går ind i en hovedsløjfe, der løbende tjekker for ventende planlagte opgaver ved hjælp af schedule.run_pending() og sover i 1 sekund mellem iterationerne for at forhindre løkken i at forbruge for meget CPU.
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)> Produktion

Hvorfor Python3 til webskrabning?
Pythons popularitet til webskrabning stammer fra flere faktorer:
- Brugervenlighed : Pythons rene og læsbare syntaks gør det nemt at forstå og skrive kode, selv for begyndere. Denne enkelhed fremskynder udviklingsprocessen og reducerer indlæringskurven for web-skrabeopgaver.
- Rigt økosystem : Python kan prale af et stort økosystem af biblioteker og rammer, der er skræddersyet til web-skrabning. Biblioteker som BeautifulSoup, Scrapy og Requests forenkler processen med at analysere HTML, hvilket gør dataudtræk til en leg.
- Alsidighed : Python er et alsidigt sprog, der kan bruges til en lang række opgaver ud over web-skrabning. Dens fleksibilitet gør det muligt for udviklere at integrere web-skrabning problemfrit i større projekter, såsom dataanalyse, maskinlæring eller webudvikling.
- Fællesskabsstøtte : Python har et stort og aktivt fællesskab af udviklere, der bidrager til dets biblioteker og yder support gennem fora, tutorials og dokumentation. Denne rigdom af ressourcer sikrer, at udviklere har adgang til assistance og vejledning, når de skal tackle udfordringer med web-skrabning.