Après Selenium, j'ai également mis à jour le scraping avec l'outil de collecte d'informations BeautifulSoup. Voici un exemple d'exportation d'une liste de produits depuis le site Amazon vers un fichier CSV. En comparant avec l'édition Selenium, vous pourrez mieux comprendre la pratique du scraping.
#RevenuComplémentaire
#BeautifulSoup
#python
#Programmation
0:00:00 Introduction
0:00:10 Exemples de scraping
0:02:00 ➀ Éviter les pannes
0:07:36 ② Code épuré avec BeautifulSoup
0:13:24 ③ Affichage des images dans le CSV
0:16:25 Conclusion
◆ Programme présenté dans la vidéo
※ L'environnement de développement est PyCharm. Fonctionne à partir de mars 2022. Utilisez le code à vos propres risques.
【selenium_amazon.py】
import csv
import datetime
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
# URL cible pour le scraping (page de résultats de recherche de montres Rolex sur 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")
# Récupération des balises contenant les produits (tous les éléments div avec la 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'})
# Décommentez les lignes suivantes pour voir les éléments récupérés dans la 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))
# Exportation au format 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', 'Nom du produit', 'Prix', 'URL de l’image', 'Image', 'Description du produit'])
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 = '[Pas de fabricant]'
try:
price = goods.find('span', {'class': 'a-price-whole'}).string.strip()
except:
price = '[Pas de prix]'
try:
image = goods.find('img', {'class': 's-image'}).get('src')
except:
image = '[Pas d’image]'
try:
description = goods.find('span', {'class': 'a-size-base-plus a-color-base a-text-normal'}).string.strip()
except:
description = '[Pas de description]'
if not ((maker == '[Pas de fabricant]' or maker == '')
and price == '[Pas de prix]' and image == '[Pas d’image]'
and description == '[Pas de description]') 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
Ce programme explique comment faire du scraping avec Python et BeautifulSoup sur le site Amazon, développé dans PyCharm.