Requisitos previos: Implementación de Web Scraping en Python con BeautifulSoup
Web Scraping es un método para extraer datos del sitio web y utilizar esos datos para otros usos. Hay varias bibliotecas y módulos para hacer web scraping en Python. En este artículo, aprenderemos cómo raspar los archivos PDF del sitio web con la ayuda de beautifulsoup, que es uno de los mejores módulos de raspado web en Python, y el módulo de requests para las requests GET. Además, para obtener más información sobre el archivo PDF, usamos el módulo PyPDF2 .
Código paso a paso –
Paso 1: Importe todos los módulos y paquetes importantes.
Python3
# for get the pdf files or url import requests # for tree traversal scraping in webpage from bs4 import BeautifulSoup # for input and output operations import io # For getting information about the pdfs from PyPDF2 import PdfFileReader
Paso 2: pasar la URL y hacer un analizador HTML con la ayuda de BeautifulSoup.
Python3
# website to scrap url = "https://www.geeksforgeeks.org/how-to-extract-pdf-tables-in-python/" # get the url from requests get method read = requests.get(url) # full html content html_content = read.content # Parse the html content soup = BeautifulSoup(html_content, "html.parser")
En el código anterior:
- El raspado se realiza mediante el enlace https://www.geeksforgeeks.org/how-to-extract-pdf-tables-in-python/
- El módulo de requests se utiliza para hacer una solicitud de obtención.
- read.content se utiliza para recorrer todo el código HTML. La impresión generará el código fuente de la página web.
- sopa tiene contenido HTML y se usa para analizar el HTML
Paso 3: Necesitamos recorrer los archivos PDF desde el sitio web.
Python3
# created an empty list for putting the pdfs list_of_pdf = set() # accessed the first p tag in the html l = soup.find('p') # accessed all the anchors tag from given p tag p = l.find_all('a') # iterate through p for getting all the href links for link in p: # original html links print("links: ", link.get('href')) print("\n") # converting the extension from .html to .pdf pdf_link = (link.get('href')[:-5]) + ".pdf" # converted to .pdf print("converted pdf links: ", pdf_link) print("\n") # added all the pdf links to set list_of_pdf.add(pdf_link)
Producción:
En el código anterior:
- list_of_pdf es un conjunto vacío creado para agregar todos los archivos PDF de la página web. Se usa set porque nunca repite los elementos con el mismo nombre. Y deshazte automáticamente de los duplicados.
- La iteración se realiza dentro de todos los enlaces convirtiendo el .HTML a .pdf. Se hace porque el nombre del PDF y el nombre del HTML tienen una única diferencia en el formato, el resto son todos iguales.
- Usamos el conjunto porque necesitamos deshacernos de nombres duplicados. La lista también se puede usar y, en lugar de agregar, agregamos todos los PDF.
Paso 4: Cree la función de información con el módulo pypdf2 para obtener toda la información requerida del pdf.
Python3
def info(pdf_path): # used get method to get the pdf file response = requests.get(pdf_path) # response.content generate binary code for # string function with io.BytesIO(response.content) as f: # initialized the pdf pdf = PdfFileReader(f) # all info about pdf information = pdf.getDocumentInfo() number_of_pages = pdf.getNumPages() txt = f""" Information about {pdf_path}: Author: {information.author} Creator: {information.creator} Producer: {information.producer} Subject: {information.subject} Title: {information.title} Number of pages: {number_of_pages} """ print(txt) return information
En el código anterior:
- La función de información es responsable de brindar toda la salida raspada requerida dentro del PDF.
- io.BytesIO(response.content): se usa porque response.content es un código binario y la biblioteca de requests tiene un nivel bastante bajo y generalmente se compila (no se interpreta). Entonces, para manejar bytes, se usa io.BytesIO .
- Hay varias funciones de pypdfs2 para acceder a diferentes datos en pdf.
Nota: Consulte Trabajar con archivos PDF en Python para obtener información detallada.
Python3
# print all the content of pdf in the console for i in list_of_pdf: info(i)
Código completo:
Python3
import requests from bs4 import BeautifulSoup import io from PyPDF2 import PdfFileReader url = "https://www.geeksforgeeks.org/how-to-extract-pdf-tables-in-python/" read = requests.get(url) html_content = read.content soup = BeautifulSoup(html_content, "html.parser") list_of_pdf = set() l = soup.find('p') p = l.find_all('a') for link in (p): pdf_link = (link.get('href')[:-5]) + ".pdf" print(pdf_link) list_of_pdf.add(pdf_link) def info(pdf_path): response = requests.get(pdf_path) with io.BytesIO(response.content) as f: pdf = PdfFileReader(f) information = pdf.getDocumentInfo() number_of_pages = pdf.getNumPages() txt = f""" Information about {pdf_path}: Author: {information.author} Creator: {information.creator} Producer: {information.producer} Subject: {information.subject} Title: {information.title} Number of pages: {number_of_pages} """ print(txt) return information for i in list_of_pdf: info(i)
Producción:
Publicación traducida automáticamente
Artículo escrito por shiv_ka_ansh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA