initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
from os import PathLike
|
||||
from pathlib import Path
|
||||
import re
|
||||
from playwright.sync_api import sync_playwright, Browser
|
||||
from contextlib import contextmanager
|
||||
|
||||
|
||||
@contextmanager
|
||||
def run_browser(data_dir: PathLike, extension_path: PathLike) -> Browser:
|
||||
with sync_playwright() as pw:
|
||||
with pw.chromium.launch_persistent_context(
|
||||
user_data_dir=data_dir,
|
||||
headless=False,
|
||||
args=[
|
||||
f"--disable-extensions-except={extension_path}",
|
||||
f"--load-extension={extension_path}",
|
||||
],
|
||||
) as browser:
|
||||
yield browser
|
||||
|
||||
|
||||
def find_sales_performance(browser: Browser, url: str) -> dict:
|
||||
with browser.new_page() as page:
|
||||
page.goto(url)
|
||||
text = page.wait_for_selector("#h10-product-score").inner_text()
|
||||
|
||||
amazon_id = re.search(r'/dp/([^?]+)', url).group(1)
|
||||
score = float(re.search(r"(\d+\.?\d*)", text).group(1))
|
||||
try:
|
||||
sales = int(re.search(r"Sales\s*(\d+[,.]?\d*)", text, re.MULTILINE).group(1).replace(',', ""))
|
||||
except:
|
||||
sales = -1
|
||||
|
||||
return {
|
||||
'amazon_id': amazon_id,
|
||||
'sales': sales,
|
||||
'score': score,
|
||||
}
|
||||
|
||||
|
||||
extension_path = Path(r"~/Desktop/amazon").expanduser().resolve()
|
||||
data_dir = Path(r'~/Desktop/amazondemo').expanduser()
|
||||
|
||||
def main():
|
||||
urls = [
|
||||
"https://www.amazon.co.uk/dp/B07B9G7V3P?psc=1",
|
||||
]
|
||||
with run_browser(data_dir=data_dir, extension_path=extension_path) as browser:
|
||||
for url in urls:
|
||||
perf = find_sales_performance(browser=browser, url=url)
|
||||
print(perf)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user