Después de selenium, también he subido un scraping con BeautifulSoup, una herramienta de recolección de información. Este es un ejemplo de cómo exportar una lista de productos desde el sitio de Amazon a un CSV. Comparándolo con la parte de selenium, creo que podrás entender más a fondo la práctica del scraping.
#IngresoExtra
#BeautifulSoup
#python
#programación
0:00:00 Introducción
0:00:10 Representante del scraping
0:02:00 ➀ Evitar que deje de funcionar
0:07:36 ② Código limpio de BeautifulSoup
0:13:24 ③ Mostrar imágenes en formato CSV
0:16:25 Conclusión
◆ Programa presentado en el video
※ El entorno de desarrollo es PyCharm. Funciona a partir de marzo de 2022. Usa el código bajo tu propia responsabilidad.
【selenium_amazon.py】
import csv
import datetime
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
# URL objetivo para el scraping (página de resultados de búsqueda de relojes Rolex en Amazon)
hdr = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'ja-JP,en-US;q=0.7,en-GB;q=0.3',
'Connection': 'keep-alive'}
req = Request(url, headers=hdr)
page = urlopen(req)
soup = BeautifulSoup(page, "lxml")
# Obtener una lista de etiquetas que agrupan los productos (todas las divs con clase sg-col-inner)
goods_list = soup.find_all('div', {'class': 'sg-col-inner'})
maker_list = soup.findAll('span', {'class': 'a-size-base-plus a-color-base'})
price_list = soup.findAll('span', {'class': 'a-price-whole'})
image_list = soup.findAll('img', {'class': 's-image'})
description_list = soup.findAll('span', {'class': 'a-size-base-plus a-color-base a-text-normal'})
# Descomentar los siguientes comentarios para ver los elementos obtenidos en la consola.
# for maker in maker_list:
# print(maker.string.strip())
# for price in price_list:
# print(price.string.strip())
# for image in image_list:
# print(image.get('src'))
# for description in description_list:
# print(description.string.strip())
# print(len(goods_list))
# print(len(maker_list))
# print(len(price_list))
# print(len(image_list))
# print(len(description_list))
# Salida de archivo en formato CSV
today = datetime.datetime.now().strftime('%Y.%m.%d')
with open('Amazon' + str(today) + '.csv', 'w', encoding='CP932', errors='replace') as f:
writer = csv.writer(f, lineterminator="\n")
writer.writerow(['No', 'Nombre del producto', 'Precio', 'URL de imagen', 'Imagen', 'Descripción del producto'])
no = 1
previousMaker, previousPrice, previousImage, previousDescription = '', '', '', ''
for goods in goods_list:
try:
maker = goods.find('span', {'class': 'a-size-base-plus a-color-base'}).string.strip()
except:
maker = '[Sin fabricante]'
try:
price = goods.find('span', {'class': 'a-price-whole'}).string.strip()
except:
price = '[Sin precio]'
try:
image = goods.find('img', {'class': 's-image'}).get('src')
except:
image = '[Sin imagen]'
try:
description = goods.find('span', {'class': 'a-size-base-plus a-color-base a-text-normal'}).string.strip()
except:
description = '[Sin descripción]'
if not ((maker == '[Sin fabricante]' or maker == '')
and price == '[Sin precio]' and image == '[Sin imagen]'
and description == '[Sin descripción]') and \
not (maker == previousMaker and price == previousPrice
and image == previousImage and description == previousDescription):
writer.writerow([no, maker, price, image, '=IMAGE(D' + str(no + 1) + ')', description])
no += 1
previousMaker = maker
previousPrice = price
previousImage = image
previousDescription = description
En este programa, explico cómo hacer scraping con Python y BeautifulSoup en el sitio de Amazon, desarrollado en PyCharm.