Created
January 6, 2021 17:57
-
-
Save programingcorner/b58546652c761ef140f967042a848ad1 to your computer and use it in GitHub Desktop.
Monitoring price comparison for a particular product on different e-commerce websites using Python. Particular we use beautiful Soup for scraping data from different website like amazon, flipkart ,ebay, olx etc. and with that we provide direct link to different website of our same search product . program description . we are using python tkint…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from tkinter import * | |
from tkinter import Scrollbar | |
from bs4 import BeautifulSoup | |
import requests | |
import webbrowser | |
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} | |
# import manan as m | |
flipkart='' | |
ebay='' | |
croma='' | |
amazon='' | |
olx='' | |
def flipkart(name = ""): | |
try: | |
global flipkart | |
name1 = name.replace(" ","+") #iphone x -> iphone+x | |
flipkart=f'https://www.flipkart.com/search?q={name1}&otracker=search&otracker1=search&marketplace=FLIPKART&as-show=off&as=off' | |
res = requests.get(f'https://www.flipkart.com/search?q={name1}&otracker=search&otracker1=search&marketplace=FLIPKART&as-show=off&as=off',headers=headers) | |
soup = BeautifulSoup(res.text,'html.parser') | |
flipkart_name = soup.select('._4rR01T')[0].getText().strip() ### New Class For Product Name | |
flipkart_name = flipkart_name.upper() | |
if name.upper() in flipkart_name: | |
flipkart_price = soup.select('._1_WHN1')[0].getText().strip() ### New Class For Product Price | |
flipkart_name = soup.select('._4rR01T')[0].getText().strip() | |
return f"{flipkart_name}\nPrise : {flipkart_price}\n" | |
else: | |
flipkart_price=' Product Not Found' | |
return flipkart_price | |
except: | |
flipkart_price= ' Product Not Found' | |
return flipkart_price | |
def ebay(name): | |
try: | |
global ebay | |
name1 = name.replace(" ","+") | |
ebay=f'https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw={name1}&_sacat=0' | |
res = requests.get(f'https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw={name1}&_sacat=0',headers=headers) | |
soup = BeautifulSoup(res.text,'html.parser') | |
length = soup.select('.s-item__price') | |
ebay_page_length=int(len(length)) | |
for i in range (0,ebay_page_length): | |
info = soup.select('.SECONDARY_INFO')[i].getText().strip() | |
info = info.upper() | |
if info=='BRAND NEW': | |
ebay_name = soup.select('.s-item__title')[i].getText().strip() | |
name=name.upper() | |
ebay_name=ebay_name.upper() | |
if name in ebay_name[:25]: | |
ebay_price = soup.select('.s-item__price')[i].getText().strip() | |
ebay_name = soup.select('.s-item__title')[i].getText().strip() | |
ebay_price = ebay_price.replace("INR","₹") | |
ebay_price=ebay_price[0:14] | |
break | |
return f"{ebay_name}\nPrise : {ebay_price}\n" | |
else: | |
i+=1 | |
i=int(i) | |
if i==ebay_page_length: | |
ebay_price = ' Product Not Found' | |
break | |
return f"{ebay_name}\nPrise : {ebay_price}\n" | |
except: | |
ebay_price = ' Product Not Found' | |
return ebay_price | |
def croma(name): | |
try: | |
global croma | |
name1 = name.replace(" ","+") | |
croma=f'https://www.croma.com/search/?text={name1}' | |
res = requests.get(f'https://www.croma.com/search/?text={name1}',headers=headers) | |
soup = BeautifulSoup(res.text,'html.parser') | |
croma_name = soup.select('h3') | |
croma_page_length = int( len(croma_name)) | |
for i in range (0,croma_page_length): | |
name = name.upper() | |
croma_name = soup.select('h3')[i].getText().strip().upper() | |
if name in croma_name.upper()[:25]: | |
croma_name = soup.select('h3')[i].getText().strip().upper() | |
croma_price = soup.select('.pdpPrice')[i].getText().strip() | |
break | |
else: | |
i+=1 | |
i=int(i) | |
if i==croma_page_length: | |
croma_price = ' Product Not Found' | |
break | |
return f"{croma_name}\nPrise : {croma_price}\n" | |
except: | |
croma_price = ' Product Not Found' | |
return croma_price | |
def amazon(name): | |
try: | |
global amazon | |
name1 = name.replace(" ","-") | |
name2 = name.replace(" ","+") | |
amazon=f'https://www.amazon.in/{name1}/s?k={name2}' | |
res = requests.get(f'https://www.amazon.in/{name1}/s?k={name2}',headers=headers) | |
soup = BeautifulSoup(res.text,'html.parser') | |
amazon_page = soup.select('.a-color-base.a-text-normal') | |
amazon_page_length = int(len(amazon_page)) | |
for i in range(0,amazon_page_length): | |
name = name.upper() | |
amazon_name = soup.select('.a-color-base.a-text-normal')[i].getText().strip().upper() | |
if name in amazon_name[0:20]: | |
amazon_name = soup.select('.a-color-base.a-text-normal')[i].getText().strip().upper() | |
amazon_price = soup.select('.a-price-whole')[i].getText().strip().upper() | |
break | |
else: | |
i+=1 | |
i=int(i) | |
if i==amazon_page_length: | |
amazon_price = ' Product Not Found' | |
break | |
return f"{amezon_name}\nPrise : {amezon_price}\n" | |
except: | |
amazon_price = ' Product Not Found' | |
return amazon_price | |
def olx(name): | |
try: | |
global olx | |
name1 = name.replace(" ","-") | |
olx=f'https://www.olx.in/items/q-{name1}?isSearchCall=true' | |
res = requests.get(f'https://www.olx.in/items/q-{name1}?isSearchCall=true',headers=headers) | |
soup = BeautifulSoup(res.text,'html.parser') | |
olx_name = soup.select('._2tW1I') | |
olx_page_length = len(olx_name) | |
for i in range(0,olx_page_length): | |
olx_name = soup.select('._2tW1I')[i].getText().strip() | |
name = name.upper() | |
olx_name = olx_name.upper() | |
if name in olx_name: | |
olx_price = soup.select('._89yzn')[i].getText().strip() | |
olx_name = soup.select('._2tW1I')[i].getText().strip() | |
olx_loc = soup.select('.tjgMj')[i].getText().strip() | |
try: | |
label = soup.select('._2Vp0i span')[i].getText().strip() | |
except: | |
label = "OLD" | |
break | |
else: | |
i+=1 | |
i=int(i) | |
if i==olx_page_length: | |
olx_price = ' Product Not Found' | |
break | |
return f"{olx_name}\nPrise : {olx_price}\n" | |
except: | |
olx_price = ' Product Not Found' | |
return olx_price | |
def convert(a): | |
b=a.replace(" ",'') | |
c=b.replace("INR",'') | |
d=c.replace(",",'') | |
f=d.replace("₹",'') | |
g=int(float(f)) | |
return g | |
def urls(): | |
global flipkart | |
global ebay | |
global croma | |
global amazon | |
global olx | |
return f"{flipkart}\n\n\n{ebay}\n\n\n{croma}\n\n\n{amazon}\n\n\n{olx}" | |
def open_url(event): | |
global flipkart | |
global ebay | |
global croma | |
global amazon | |
global olx | |
webbrowser.open_new(flipkart) | |
webbrowser.open_new(ebay) | |
webbrowser.open_new(croma) | |
webbrowser.open_new(amazon) | |
webbrowser.open_new(olx) | |
def search(): | |
box1.insert(1.0,"Loding...") | |
box2.insert(1.0,"Loding...") | |
box3.insert(1.0,"Loding...") | |
box4.insert(1.0,"Loding...") | |
box5.insert(1.0,"Loding...") | |
box6.insert(1.0,"Loding...") | |
search_button.place_forget() | |
box1.delete(1.0,"end") | |
box2.delete(1.0,"end") | |
box3.delete(1.0,"end") | |
box4.delete(1.0,"end") | |
box5.delete(1.0,"end") | |
box6.delete(1.0,"end") | |
t1=flipkart(product_name.get()) | |
box1.insert(1.0,t1) | |
t2=ebay(product_name.get()) | |
box2.insert(1.0,t2) | |
t3=croma(product_name.get()) | |
box3.insert(1.0,t3) | |
t4=amazon(product_name.get()) | |
box4.insert(1.0,t4) | |
t5=olx(product_name.get()) | |
box5.insert(1.0,t5) | |
t6 = urls() | |
box6.insert(1.0,t6) | |
window = Tk() | |
window.wm_title("Prise comparison extinction") | |
window.minsize(1500,700) | |
lable_one = Label(window, text="Enter Product Name :", font=("courier", 10)) | |
lable_one.place(relx=0.2, rely=0.1, anchor="center") | |
product_name = StringVar() | |
product_name_entry = Entry(window, textvariable=product_name, width=50) | |
product_name_entry.place(relx=0.5, rely=0.1, anchor="center") | |
search_button = Button(window, text="Search", width=12, command= search) | |
search_button.place(relx=0.5, rely=0.2, anchor="center") | |
l1 = Label(window, text="flipkart", font=("courier", 20)) | |
l2 = Label(window, text="ebay", font=("courier", 20)) | |
l3 = Label(window, text="croma", font=("courier", 20)) | |
l4 = Label(window, text="amazon", font=("courier", 20)) | |
l5 = Label(window, text="olx", font=("courier", 20)) | |
l6 = Label(window, text="All urls", font=("courier", 20)) | |
l8 = Label(window, text="Loding.....", font=("courier", 30)) | |
l1.place(relx=0.1, rely=0.3, anchor="center") | |
l2.place(relx=0.5, rely=0.3, anchor="center") | |
l3.place(relx=0.8, rely=0.3, anchor="center") | |
l4.place(relx=0.1, rely=0.6, anchor="center") | |
l5.place(relx=0.5, rely=0.6, anchor="center") | |
l6.place(relx=0.8, rely=0.6, anchor="center") | |
scrollbar = Scrollbar(window) | |
box1 = Text(window, height=7, width=50, yscrollcommand=scrollbar.set) | |
box2 = Text(window, height=7, width=50, yscrollcommand=scrollbar.set) | |
box3 = Text(window, height=7, width=50, yscrollcommand=scrollbar.set) | |
box4 = Text(window, height=7, width=50, yscrollcommand=scrollbar.set) | |
box5 = Text(window, height=7, width=50, yscrollcommand=scrollbar.set) | |
box1.place(relx=0.2, rely=0.4, anchor="center") | |
box2.place(relx=0.5, rely=0.4, anchor="center") | |
box3.place(relx=0.8, rely=0.4, anchor="center") | |
box4.place(relx=0.2, rely=0.7, anchor="center") | |
box5.place(relx=0.5, rely=0.7, anchor="center") | |
box6 = Text(window, height=15, width=50, yscrollcommand=scrollbar.set, fg="blue", cursor="hand2") | |
box6.place(relx=0.8, rely=0.8, anchor="center") | |
box6.bind("<Button-1>", open_url) | |
window.mainloop() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment