-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
77 lines (53 loc) · 1.75 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import argparse
import csv
import sys
from os import environ as env
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import Asin
from scrapper import Scrapper
from dotenv import find_dotenv, load_dotenv
def prepare_env():
"""Prepare environment variables"""
env_file = find_dotenv()
if env_file:
load_dotenv(env_file)
def prepare_args():
"""Prepare application arguments and options"""
parser = argparse.ArgumentParser(description="Grab Amazon product data")
parser.add_argument("-i", help="ASINs CSV file path", default="asins.csv")
return parser.parse_args()
def read_asins(filename):
"""Read ASINs from file"""
asins = []
with open(filename) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=",")
for row in csv_reader:
if row[0] not in asins:
asins.append(row[0])
return asins
def init_database_connection():
"""Init database connection"""
engine = create_engine(env.get("DATABASE_URL"))
Session = sessionmaker(bind=engine)
return Session()
if __name__ == "__main__":
prepare_env()
args = prepare_args()
db = init_database_connection()
for asin_id in read_asins(args.i):
print(asin_id)
asin = db.query(Asin).filter_by(asin=asin_id).first()
if not asin:
asin = Asin(asin_id)
db.add(asin)
scrapper = Scrapper(env.get("ZENSCRAPE_API_KEY"))
try:
product = scrapper.get_product_data(asin)
db.add(product)
review = scrapper.get_review_data(asin)
db.add(review)
except Exception as exception:
print(exception, file=sys.stderr)
continue
db.commit()