logo

Tutorial de raspat web de Python

El web scraping, el procés d'extracció de dades de llocs web, s'ha convertit en una tècnica potent per recopilar informació de la gran extensió d'Internet. En aquest tutorial, explorarem diverses biblioteques i mòduls de Python que s'utilitzen habitualment per al raspat web i aprofundirem en per què Python 3 és l'opció preferida per a aquesta tasca.

Paquets i eines essencials per a Python Web Scraping

L'última versió de Python , ofereix un ric conjunt d'eines i biblioteques dissenyades específicament per a la web scraping, cosa que fa que sigui més fàcil que mai recuperar dades del web de manera eficient i eficaç.



Taula de contingut

Mòdul de peticions

La biblioteca de sol·licituds s'utilitza per fer sol·licituds HTTP a un URL específic i retorna la resposta. Les sol·licituds de Python proporcionen funcionalitats integrades per gestionar tant la sol·licitud com la resposta.

pip install requests>

Exemple: fer una sol·licitud

El mòdul de peticions de Python té diversos mètodes integrats per fer sol·licituds HTTP a l'URI especificat mitjançant sol·licituds GET, POST, PUT, PATCH o HEAD. Una sol·licitud HTTP està destinada a recuperar dades d'un URI especificat o enviar dades a un servidor. Funciona com un protocol de petició-resposta entre un client i un servidor. Aquí farem servir la sol·licitud GET. El Mètode GET s'utilitza per recuperar informació del servidor donat mitjançant un URI determinat. El mètode GET envia la informació codificada de l'usuari adjunta a la sol·licitud de la pàgina.



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

Sortida

Sol·licituds de Python fent una sol·licitud GET

Per a més informació, consulteu el nostre Tutorial de sol·licituds de Python .



Biblioteca BeautifulSoup

Beautiful Soup ofereix uns quants mètodes senzills i frases Pythonic per guiar, cercar i canviar un arbre d'anàlisi: un conjunt d'eines per estudiar un document i eliminar el que necessiteu. No es necessita gaire codi per documentar una aplicació.

Beautiful Soup converteix automàticament els registres entrants a Unicode i els formularis sortints a UTF-8. No heu de pensar en les codificacions tret que el document no defineixi cap codificació i Beautiful Soup no en pugui agafar cap. Aleshores només heu de triar la codificació original. Beautiful Soup es troba al damunt dels famosos analitzadors de Python com LXML i HTML, cosa que us permet provar diferents estratègies d'anàlisi o velocitat de comerç per obtenir més flexibilitat.

pip install beautifulsoup4>

Exemple

  1. Importació de biblioteques: El codi importa la biblioteca de sol·licituds per fer peticions HTTP i la classe BeautifulSoup de la biblioteca bs4 per analitzar HTML.
  2. Realització d'una sol·licitud GET: Envia una sol·licitud GET a 'https://www.techcodeview.com
  3. Comprovació del codi d'estat: Imprimeix el codi d'estat de la resposta, normalment 200 per tenir èxit.
  4. Analitzant l'HTML : El contingut HTML de la resposta s'analitza mitjançant BeautifulSoup i s'emmagatzema a la variable sopa.
  5. Impressió de l'HTML Prettified: Imprimeix la versió adornada del contingut HTML analitzat per a la seva llegibilitat i anàlisi.
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())>

Sortida

hashset vs hashmap

Python BeautifulSoup Anàlisi HTML

Trobar elements per classe

Ara, ens agradaria extreure algunes dades útils del contingut HTML. L'objecte sopa conté totes les dades de l'estructura imbricada que es podrien extreure mitjançant programació. El lloc web que volem esborrar conté molt de text, així que ara anem a raspar tot aquest contingut. Primer, inspeccionem la pàgina web que volem raspar.


A la imatge de dalt, podem veure que tot el contingut de la pàgina es troba sota el div amb el contingut d'entrada de classe. Farem servir la classe find. Aquesta classe trobarà l'etiqueta donada amb l'atribut donat. En el nostre cas, trobarà tot el div que tingui classe com a contingut d'entrada.

Podem veure que el contingut de la pàgina es troba sota el

etiqueta. Ara hem de trobar totes les etiquetes p presents en aquesta classe. Podem utilitzar eltrobar_tot classe de la 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)>

Sortida:

trobar_tots bs4

Per a més informació, consulteu el nostre Python BeautifulSoup .

Seleni

Selenium és un mòdul Python popular utilitzat per automatitzar navegadors web. Permet als desenvolupadors controlar els navegadors web de manera programàtica, permetent tasques com ara el raspat web, les proves automatitzades i la interacció amb aplicacions web. Selenium admet diversos navegadors web, inclosos Chrome, Firefox, Safari i Edge, el que el converteix en una eina versàtil per a l'automatització del navegador.

Exemple 1: per a Firefox

En aquest exemple concret, estem dirigint el navegador a la pàgina de cerca de Google amb el paràmetre de consulta geeksforgeeks. El navegador carregarà aquesta pàgina i, a continuació, podrem procedir a interactuar-hi de manera programàtica mitjançant Selenium. Aquesta interacció podria implicar tasques com extreure resultats de cerca, fer clic als enllaços o esborrar contingut específic de la pàgina.

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

Sortida

per a firefox

Exemple 2: per a Chrome

  1. Importem el mòdul webdriver de la biblioteca Selenium.
  2. Especifiquem el camí a l'executable del controlador web. Heu de descarregar el controlador adequat per al vostre navegador i proporcionar-ne la ruta. En aquest exemple, estem utilitzant el controlador de Chrome.
  3. Creem una nova instància del navegador web mitjançant webdriver.Chrome() i passem el camí a l'executable del controlador de Chrome com a argument.
  4. Naveguem a una pàgina web cridant al mètode get() a l'objecte del navegador i passant l'URL de la pàgina web.
  5. Extraïm informació de la pàgina web mitjançant diversos mètodes proporcionats per Selenium. En aquest exemple, recuperem el títol de la pàgina mitjançant l'atribut title de l'objecte del navegador.
  6. Finalment, tanquem el navegador mitjançant el mètode 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()>

Sortida

Per a més informació, consulteu el nostre Python Selenium .

Lxml

El mòdul lxml de Python és una biblioteca potent per processar documents XML i HTML. Proporciona capacitats d'anàlisi XML i HTML d'alt rendiment juntament amb una API Pythonic senzilla. lxml s'utilitza àmpliament en el raspat web de Python a causa de la seva velocitat, flexibilitat i facilitat d'ús.

pip install lxml>

Exemple

Aquí teniu un exemple senzill que demostra com utilitzar el mòdul lxml per al raspat web de Python:

  1. Importem el mòdul html des de lxml juntament amb el mòdul de peticions per enviar sol·licituds HTTP.
  2. Definim l'URL del lloc web que volem raspar.
  3. Enviem una sol·licitud HTTP GET al lloc web mitjançant la funció requests.get() i recuperem el contingut HTML de la pàgina.
  4. Analitzem el contingut HTML mitjançant la funció html.fromstring() de lxml, que retorna un arbre d'elements HTML.
  5. Utilitzem expressions XPath per extreure elements específics de l'arbre HTML. En aquest cas, estem extreint el contingut de text de tots els fitxers elements (àncora) a la pàgina.
  6. Repassem els títols dels enllaços extrets i els imprimim.
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)>

Sortida

More information...>

Mòdul Urllib

El mòdul urllib de Python és una biblioteca integrada que proporciona funcions per treballar amb URL. Us permet interactuar amb pàgines web obtenint URL (localitzadors uniformes de recursos), obrint-ne i llegint-ne dades i realitzant altres tasques relacionades amb URL com la codificació i l'anàlisi. Urllib és un paquet que recull diversos mòduls per treballar amb URL, com ara:

  • urllib.request d'obertura i lectura.
  • urllib.parse per analitzar URL
  • urllib.error per a les excepcions plantejades
  • urllib.robotparser per analitzar fitxers robot.txt

Si urllib no està present al vostre entorn, executeu el codi següent per instal·lar-lo.

pip install urllib3>

Exemple

Aquí teniu un exemple senzill que demostra com utilitzar el mòdul urllib per obtenir el contingut d'una pàgina web:

  1. Definim l'URL de la pàgina web que volem obtenir.
  2. Utilitzem la funció urllib.request.urlopen() per obrir l'URL i obtenir un objecte de resposta.
  3. Llegim el contingut de l'objecte resposta mitjançant el mètode read().
  4. Com que el contingut es retorna com a bytes, el descodifiquem en una cadena mitjançant el mètode decode() amb codificació 'utf-8'.
  5. Finalment, imprimim el contingut HTML de la pàgina web.
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)>

Sortida

uutt

PyautoGUI

El mòdul pyautogui de Python és una biblioteca d'automatització de GUI multiplataforma que permet als desenvolupadors controlar el ratolí i el teclat per automatitzar tasques. Tot i que no està dissenyat específicament per al raspat web, es pot utilitzar juntament amb altres biblioteques de raspat web com Selenium per interactuar amb pàgines web que requereixen l'entrada de l'usuari o simular accions humanes.

pip3 install pyautogui>

Exemple

En aquest exemple, pyautogui s'utilitza per fer el desplaçament i fer una captura de pantalla de la pàgina de resultats de la cerca obtinguda escrivint una consulta al camp d'entrada de cerca i fent clic al botó de cerca amb 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()>

Sortida

Horari

El mòdul de planificació de Python és una biblioteca senzilla que us permet programar les funcions de Python perquè s'executen a intervals especificats. És especialment útil en el raspat web a Python quan necessiteu raspar dades d'un lloc web regularment a intervals predefinits, com ara cada hora, diari o setmanal.

Exemple

  • Importem els mòduls necessaris: horari, hora, peticions i BeautifulSoup del paquet bs4.
  • Definim una funció scrape_data() que realitza la tasca de rascat web. Dins d'aquesta funció, enviem una sol·licitud GET a un lloc web (substituïm 'https://example.com' per l'URL del lloc web que voleu raspar), analitzem el contingut HTML amb BeautifulSoup, extreu les dades desitjades i l'imprimim. .
  • Programem la funció scrape_data() perquè s'executi cada hora mitjançant schedule.every().hour.do(scrape_data).
  • Entrem en un bucle principal que comprova contínuament les tasques programades pendents mitjançant schedule.run_pending() i s'atura durant 1 segon entre iteracions per evitar que el bucle consumeixi massa CPU.
Python
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1)>

Sortida

Per què Python3 per a Web Scraping?

La popularitat de Python per al raspat web prové de diversos factors:

  1. Facilitat d'ús : La sintaxi neta i llegible de Python fa que sigui fàcil d'entendre i escriure codi, fins i tot per als principiants. Aquesta senzillesa accelera el procés de desenvolupament i redueix la corba d'aprenentatge de les tasques de raspat web.
  2. Ecosistema ric : Python compta amb un ampli ecosistema de biblioteques i marcs adaptats per al raspat web. Biblioteques com BeautifulSoup, Scrapy i Requests simplifiquen el procés d'anàlisi d'HTML, fent que l'extracció de dades sigui molt fàcil.
  3. Versatilitat : Python és un llenguatge versàtil que es pot utilitzar per a una àmplia gamma de tasques més enllà del web scraping. La seva flexibilitat permet als desenvolupadors integrar el web scraping a la perfecció en projectes més grans, com ara l'anàlisi de dades, l'aprenentatge automàtic o el desenvolupament web.
  4. Suport comunitari : Python té una comunitat gran i activa de desenvolupadors que contribueixen a les seves biblioteques i ofereixen suport mitjançant fòrums, tutorials i documentació. Aquesta riquesa de recursos garanteix que els desenvolupadors tinguin accés a assistència i orientació a l'hora d'abordar els reptes del raspat web.