Nach selenium habe ich auch das Scraping-Tool BeautifulSoup zur Informationsbeschaffung hochgeladen. Dies ist ein Beispiel, wie man eine Produktliste von der Amazon-Website in eine CSV-Datei exportiert. Durch den Vergleich mit der selenium-Edition hoffe ich, dass Sie ein tieferes Verständnis für das tatsächliche Scraping gewinnen können.
#Nebenjob
#BeautifulSoup
#python
#Programm
0:00:00 Intro
0:00:10 Repräsentatives Scraping
0:02:00 ➀ Vermeidung von Funktionsstörungen
0:07:36 ② Klarer Code mit BeautifulSoup
0:13:24 ③ Bilder in CSV sichtbar darstellen
0:16:25 Ende
◆ Im Video vorgestelltes Programm
※ Die Entwicklungsumgebung ist PyCharm. Es funktioniert Stand März 2022. Der Code kann auf eigene Verantwortung verwendet werden.
【selenium_amazon.py】
import csv
import datetime
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
# URL für das Scraping (Seite mit Suchergebnissen für Uhren von Rolex auf 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")
# Tags für die Produktgruppen in einer Liste abrufen (alle div-Elemente mit class 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'})
# Wenn Sie die folgenden Kommentare entfernen, können Sie die abgerufenen Elemente in der Konsole sehen.
# 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))
# CSV-Datei ausgeben
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(['Nr', 'Produktname', 'Preis', 'Bild-URL', 'Bild', 'Produktbeschreibung'])
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 = '[Kein Hersteller]'
try:
price = goods.find('span', {'class': 'a-price-whole'}).string.strip()
except:
price = '[Kein Preis]'
try:
image = goods.find('img', {'class': 's-image'}).get('src')
except:
image = '[Kein Bild]'
try:
description = goods.find('span', {'class': 'a-size-base-plus a-color-base a-text-normal'}).string.strip()
except:
description = '[Keine Beschreibung]'
if not ((maker == '[Kein Hersteller]' or maker == '')
and price == '[Kein Preis]' and image == '[Kein Bild]'
and description == '[Keine Beschreibung]') 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
In diesem Programm wird das Scraping mit Python und BeautifulSoup anhand eines Beispiels von der Amazon-Website erklärt, das in PyCharm entwickelt wurde.