监控可用性 迪卡侬的产品



我开发了这个Python脚本来监控迪卡侬产品的可用性。

问题是,我得到了相同的输出";不可用";对于我监控的所有产品,如果它们有库存的话。这是因为库存产品和非库存产品具有相同的脚本。十项全能脚本的哪一部分我必须刮?

这是我的程序:

import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
}
url = 'https://www.decathlon.it/kit-manubri-e-bilanciere-50-kg-id_8501164.html'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
soup.encode('utf-8')
def send_notifcation():
print('Sending notification to discord...')
def product_checker():
title = soup.find( id = 'productName').get_text()
price = soup.find(id = 'real_price_value').get_text()
available = soup.find(attrs={'class':"unavailability"}).get_text()
print(title)
print(price)
print (available)
if available=='Disponibile': #'Disponibile' means 'available in Italian.
send_notifcation()
while(True):
print("nChecking product... n")
product_checker()
time.sleep(2 * 30)
#"Prodotto non disponibile online." means "Product not available online."

实际上class名称使用不同的名称:可用性不可用性。

其中availability=Disponibile

并且CCD_ 3=Prodotto non-disponibile online。

此外,它在源脚本中的多个跨度中显示。

但为了获得准确的结果,我们可以直接用regex查询JSONdict,使用以下方法检查availability

import requests
import re
urls = ['kit-manubri-e-bilanciere-50-kg-id_8501164.html',
'trampolino-esagonale-240-id_8605632.html']

def main(site):
with requests.Session() as req:
for url in urls:
r = req.get(site.format(url))
match = re.search('availability.+org/(.*?)"', r.text)
print("url: {:<70}, status: {}".format(r.url, match.group(1)))

main("https://www.decathlon.it/{}")

输出:

url: https://www.decathlon.it/kit-manubri-e-bilanciere-50-kg-id_8501164.html, status: InStoreOnly
url: https://www.decathlon.it/trampolino-esagonale-240-id_8605632.html     , status: InStock

最新更新