Что ж, у вас есть две разные проблемы, как я вижу:
- Извлечение всех необходимых деталей для каждого элемента и помещение их в структуру данных.
- Сохранение этогоданные с помощью БД или файла Excel (например, CSV).
Итак, давайте предположим, что все, кого интересует информация о продукте, - это его имя и цена (только для объяснения), мы 'Я создам простой класс с именем Product:
class Product(object):
def __init__(self, name, price):
self.name = name
self.price = price
И затем для каждого найденного предмета мы получим его цену и имя и создадим экземпляр продукта:
titles_element = browser.find_elements_by_xpath("//div[@class='s-item-container']")
products = []
for x in titles_element:
try:
name = x.find_element_by_class_name("s-access-title").text
price = x.find_element_by_class_name("s-price").text
products.append(Product(name, price))
except WebDriverException:
pass
Конечно, вы можете получить любые другие данные, которые вас интересуют, используя правильный селектор CSS / Xpath или даже регулярные выражения.
После этого у вас будут нужные данные, и это будет намного прощечтобы сохранить с использованием БД, JSON, CSV или любого другого типа хранилища данных, которое вы хотите, давайте взглянем на сохранение этих данных в файл CSV, например:
import csv
def save_products_to_csv_file(product_list, file_name):
with open(file_name, 'wb') as csvfile:
fieldnames = ['name', 'price']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product in products:
writer.writerow({'name': product.name, 'price': product.price})
А вот еще один примерхранения ваших данных вБД SQLite с использованием SQLAlchemy:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, String
Base = declarative_base()
# Creating a DB model class that reprsents our Product object.
class Product(Base):
__tablename__ = 'products'
# Here we define columns for the product
id = Column(Integer, primary_key=True)
name = Column(String)
price = Column(String)
engine = create_engine('sqlite:///sqlalchemy_example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
titles_element = browser.find_elements_by_xpath("//div[@class='s-item-container']")
for x in titles_element:
try:
name = x.find_element_by_class_name("s-access-title").text
price = x.find_element_by_class_name("s-price").text
new_product = Product(name=name, price=price)
session.add(new_product)
except WebDriverException:
pass
session.commit()