使用 Python 檢查亞馬遜產品的可用性

| | | | | |

眾所周知,Python 是一種廣泛用於腳本編寫的多用途語言。它的用途不僅限於解決複雜的計算,還可以用於自動化日常任務。假設我們想要跟踪任何亞馬遜產品的可用性並在產品的可用性發生變化時達成交易,並通過電子郵件通知用戶可用性。為此編寫 Python 腳本會很有趣。筆記。在運行腳本之前安裝所需的庫(根據代碼)。另請注意,如果產品當前不可用,則不會向用戶發送電子郵件。用戶必須為他們想要跟踪的產品提供 Asin Id。

使用的每個模塊的工作:
  • -> 請求:用於進行 HTTP 獲取和發布requests
  • -> time:用於查找當前時間,等待,sleep
  • -> schedule:用於安排函數在間隔後再次運行。它類似於 JavaScript 中的“setInterval," 功能。
  • -> smptlib:用於使用 Python 發送電子郵件。

#亞馬遜產品可用性檢查器的 Python 腳本 # 從 lxml 導入庫 import html import requests from time import sleep import time import schedule import smtplib # 誰想要檢查可用性的電子郵件 ID receiver_email_id = "EMAIL_ID_OF_USER" def check(url): headers = {` User-Agent`: `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36`} # 添加標題以表明你是一個正在發送 GET 請求的瀏覽器page = requests.get(url, headers = headers) for i in range(20): # 因為連續檢查 # 毫秒或幾秒 # 阻止你的請求 sleep(3) # 解析 html 內容 doc = html.fromstring(page .content) # 檢查可用性 XPATH_AVAILABILITY = `//div[@id ="availability"]//text()` RAw_AVAILABILITY = doc.xpath(XPATH_AVAILABILITY) AVAILABIL ITY = ``.join(RAw_AVAILABILITY).strip() if RAw_AVAILABILITY else None 返回 AVAILABILITY def sendemail(ans, product): GMAIL_USERNAME = "YOUR_GMAIL_ID" GMAIL_PASSWORD = "YOUR_GMAIL_PASSWORD" 收件人 = receiver_email_id body_of_email = ans email_subject = product + ` 產品可用性` # 創建 SMTP 會話 s = smtplib.SMTP(`smtp.gmail.com`, 587) # 為安全啟動 TLS s.starttls() # Authentication s.login(GMAIL_USERNAME, GMAIL_PASSWORD) # 要發送的消息 headers = " " .join(["from: " + GMAIL_USERNAME, "subject:" + email_subject, "to:" + 收件人, "mime-version: 1.0", "content-type: text/html"]) content = headers + "" + body_of_email s.sendmail(GMAIL_USERNAME, recipient, content) s.quit() def ReadAsin(): # Asin Id 是用戶需要提供的產品 ID Asin = `B077PWK5BT` url = "http:// www.amazon.in/dp/" + Asin print ("Processing: "+url) ans = check(url) arr = [ `僅剩 1 件。`, `僅剩 2 件。`, `有貨.`] print(ans) if ans in arr: # s如果 # 如果產品可用 sendemail(ans, Asin) # 安排相同的代碼在每 1 分鐘後運行多次 def job(): print("Tracking....") ReadAsin() schedule.every (1).minutes.do(job) while True: # 運行所有掛起的任務/作業 schedule.run_pending() time.sleep(1) 

Output:

Tracking.. .. 處理:http://www.amazon.in/dp/B077PWK5BT 庫存僅剩 1 件。跟踪.... 處理中:http://www.amazon.in/dp/B077PWK5BT 庫存僅剩 1 件。跟踪.... 處理中:http://www.amazon.in/dp/B077PWK5BT 庫存僅剩 1 件。 

如果使用 JavaScript,如何使用 python 請求創建庫存可用性檢查器?

StackOverflow 問題

我寫了一些代碼來檢查產品是否有庫存,當有庫存時,給我發一封電子郵件通知我。當我要查找的內容位於 html 中時,此方法有效。

但是,有時某些對像是通過 JavaScript 加載的。我如何編輯我的代碼,以便網絡抓取也適用於 JavaScript?

這是我目前的代碼:

import 時間 import 請求 while True: # 獲取宜家頁面的url url = `https://www.ikea.com/nl/nl/p/flintan-bureaustoel-vissle-zwart-20336841/` #從該頁面獲取文本並將所有內容放在小寫中 productpage = requests.get(url).text.lower() # 設置應該在頁面上的字符串如果產品不可用 outofstockstrings = [`niet beschikbaar voor levering`, `alleen beschikbaar in de winkel `] # 檢查字符串是否在網頁的文本中 if any(x in productpage for x in outofstockstrings): time.sleep(1800) 繼續 其他: # 給我發一封電子郵件並打破循環 

答案:

你可以使用非官方庫存來代替抓取和分析 HTML宜家網站也在使用的 API。該 API 返回的 JSON 數據更易於分析,並且您還可以在產品恢復庫存時獲得估算值。

甚至還有一個用 javascript / node 編寫的項目可以為您提供此類信息直接從命令行:https://github.com/Ephigenia/ikea-availability-checker< /a>

您可以輕鬆查看荷蘭所有商店中椅子的庫存量:

npx ikea-availability-checker stock --country nl 20336841 

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method