from bs4 import BeautifulSoup from dhooks import Embed from discord import Webhook, RequestsWebhookAdapter import urllib import requests proxies=[ '161.202.226.194:80', '172.245.173.103:3128', '138.197.204.55:3128', '157.245.207.190:8080', '161.202.226.194:8123', '209.90.63.108:80', '134.209.219.234:80', '159.203.166.41:8080', '207.154.231.211:3128', '162.243.107.120:3128', '162.243.108.141:8080', '138.68.161.14:8080', '13.250.49.211:80', '162.223.88.228:8080', '18.210.69.172:3128', '207.154.231.216:8080', '167.71.248.252:80', '165.227.215.62:3128', '198.199.119.119:8080', '165.22.54.37:8080', '141.125.82.106:80', '138.68.41.90:8080', '157.230.162.226:8118', '159.8.114.34:8123', '134.209.219.234:80', '167.71.248.252:80', '47.52.76.196:80', '159.69.133.211:8080', '138.68.173.29:8080', '162.243.108.161:8080', '162.243.108.161:8080', '149.34.3.52:8080', '134.209.188.111:8080', '134.209.165.200:1080', '138.68.173.29:3128', '198.199.119.119:3128', '54.208.83.109:80', '99.126.106.177:80', '138.197.157.60:3128', '167.71.33.215:3128', '138.68.41.90:3128', '159.65.151.96:3128', '138.197.157.32:3128', '47.52.131.183:80', '18.210.69.172:3128', '165.227.215.62:8080', '159.203.87.130:3128', '161.202.226.194:25', '157.245.52.211:8080', '161.202.226.194:25' ] list={ 'https':'' } link = "https://kith.com/collections/new-arrivals" link_new = "https://kith.com/collections/new-arrivals?page=2" wh_id = "643109450718117918" wh_token = "lFusGXHVG47TTMwzhtACAPoAOGhDIhJvPzs_wg20l2phZbVFbF0zHmlV-YvBrM8s_zmm" def proxy_request(link,proxies): for proxy in proxies: list['https']=proxy try: r = requests.get(link, proxies=list) except: proxies.remove(proxy) print("exception occured, removed proxy ", proxy) else: print("current proxy is ", proxy) html = r.text soup = BeautifulSoup(html, 'lxml') items = soup.find_all("li", {"class": "collection-product"}) if (len(items) > 0): return soup else: proxies.remove(proxy) print("shopify access denied, removed proxy ", proxy) if len(proxies)==0: return 0 def default_request(link): req = requests.get(link) html = req.text soup = BeautifulSoup(html, 'lxml') items = soup.find_all("li", {"class": "collection-product"}) if (len(items) > 0): return soup else: return 0 old_items = default_request(link).find_all("li", {"class": "collection-product"}) new_items= default_request(link).find_all("li", {"class": "collection-product"}) request_no = 1 ip = 0 default_result =0 proxy_result =0 while(True): default_result = default_request(link) proxy_result = proxy_request(link,proxies) if (new_items == old_items): if(default_result==0): if (proxy_result == 0): print("all ips have been banned") break soup = proxy_result else: soup = default_result print("using resi") new_items = soup.find_all("li", {"class": "collection-product"}) print(len(new_items)) print(len(old_items)) print("nothing has changed yet") print("current request number is ",request_no) request_no+=1 else: upload_items=[] print("new items have been loaded, processing a webhook...") for item in new_items: if not (item in old_items): upload_items.append(item) old_items = new_items i = 0 for item in upload_items: variants = soup.find_all("ul", {"class": "product-card__variants"})[i].findChildren("li") i += 1 sizes = {} for variant in variants: id = variant.find("button")['data-variant'] sizes[variant.find("button").text] = "https://kith.com/cart/" + id + ":1" output_sizes = [] for size in sizes: output_sizes.append('[{0}]({1})'.format(size, sizes.get(size))) item_url = "https://kith.com" + item.find("a")['href'] request = requests.get(item_url) item_html = request.text item_soup = BeautifulSoup(item_html, 'lxml') name = item_soup.find("h1", {'class': "product-single__title"}).text photo = "https:" + item_soup.find("img")['src'] color = item_soup.find(class_="product-single__color").text price = item_soup.find(class_="btn product-form__add-to-cart").findChildren("span")[0].text webhook = Webhook.partial(wh_id, wh_token, adapter=RequestsWebhookAdapter()) embed = Embed() embed.description = '[{0}]({1})\n{2}'.format(name, item_url, color) embed.set_thumbnail(url=photo) embed.add_field(name='ATC', value='\n'.join(output_sizes)) embed.add_field(name='Price', value=price) embed.set_footer(text='WebHook v4 by vanchespop') webhook.send(embed=embed)