Após o selenium, também publiquei o scraping com a ferramenta de coleta de informações BeautifulSoup. Este é um exemplo de como exportar uma lista de produtos do site da Amazon para um arquivo CSV. Comparando com a edição do selenium, espero que você possa entender mais profundamente a prática do scraping.
#TrabalhoParalelo
#BeautifulSoup
#python
#programação
0:00:00 Introdução
0:00:10 Representante do scraping
0:02:00 ➀ Evitar que pare de funcionar
0:07:36 ② Código limpo do BeautifulSoup
0:13:24 ③ Exibir imagens de forma visível no CSV
0:16:25 Encerramento
◆ Programa apresentado no vídeo
※ O ambiente de desenvolvimento é o pycharm. Funciona até março de 2022. O código pode ser utilizado à sua própria responsabilidade.
【selenium_amazon.py】
import csv
import datetime
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
# URL alvo do scraping (página de resultados da pesquisa de relógios Rolex no site da 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")
# Obter a lista de tags que agrupam os produtos (todos os elementos div com a classe 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'})
# Remova os comentários abaixo para ver os elementos obtidos no console.
# 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))
# Saída de arquivo em 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', 'Nome do Produto', 'Preço', 'URL da Imagem', 'Imagem', 'Descrição do Produto'])
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 = '[Sem Fabricante]'
try:
price = goods.find('span', {'class': 'a-price-whole'}).string.strip()
except:
price = '[Sem Preço]'
try:
image = goods.find('img', {'class': 's-image'}).get('src')
except:
image = '[Sem Imagem]'
try:
description = goods.find('span', {'class': 'a-size-base-plus a-color-base a-text-normal'}).string.strip()
except:
description = '[Sem Descrição]'
if not ((maker == '[Sem Fabricante]' or maker == '')
and price == '[Sem Preço]' and image == '[Sem Imagem]'
and description == '[Sem Descrição]') 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
Este programa explica como fazer scraping com Python e BeautifulSoup no site da Amazon, desenvolvido no Pycharm.