Blame | Last modification | View Log | RSS feed
from BeautifulSoup import BeautifulSoupimport urllib2import urllibimport MySQLdbimport reimport syslistCircle = [['Andhra Pradesh','hyd',1,0],['Assam','asm',2,0],['Bihar','bih',3,0],['Chennai','che',4,0],['Delhi NCR','del',5,0],['Gujarat','guj',6,0],['Haryana','har',9,0],['Himachal Pradesh','hip',7,0],['Jammu','jnk',8,0],['Karnataka','kar',10,0],['Kerela','ker',11,0],['Kolkata','kol',12,0],['MP','map',14,0],['Maharashtra','mah',13,1],['Mumbai','mum',15,1],['North East','ner',16,0],['Orissa','ors',17,0],['Punjab','pun',18,0],['Rajasthan','raj',19,1],['Tamil Nadu','tam',20,0],['UP East','upe',21,1],['UP(West)','upw',22,0],['West Bengal','rob',23,0]]j =0db = MySQLdb.connect("localhost","root","shop2020","transaction" )for i in listCircle:print "Circle Name: "+listCircle[j][0]pageno=1start=1while(True):url = "https://shop.vodafone.in/shop/rechargeOnline.jsp?start=%d"%(start)data = {'cid' : listCircle[j][1]}Attempt = 1connected = Falsewhile not connected:try:data = urllib.urlencode(data)req = urllib2.Request(url, data)response = urllib2.urlopen(req)page = response.read()soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)connected =Trueexcept:print "In Except Block for Url "+url+" And Circle "+listCircle[j][0]print "Retrying:",print AttemptAttempt = Attempt+1if Attempt ==6:sys.exit(1)links = soup.findAll("a", {"class" : "arrowlink"})size = len(links)if size == 0:print "Break for url "+urlbreakprint "Page: ",print pagenofor i in links:connected_plans = FalseAttempt_Plans =1result = re.search('sku[0-9]+', str(i))sku = result.group(0)print "SkuId:",print skutable_url = "https://shop.vodafone.in/shop/ajax/viewRechargeDetails.jsp?id="+skuwhile not connected_plans:try:req = urllib2.Request(table_url)response = urllib2.urlopen(req)page = response.read()soup = BeautifulSoup(page,convertEntities=BeautifulSoup.HTML_ENTITIES)connected_plans = Trueexcept:print "Except Block Hitting SkuUrl "print "Retrying:",print Attempt_PlansAttempt_Plans = Attempt_Plans+1if Attempt_Plans ==6:sys.exit(2)Table = soup.find("table")td = Table.findAll("td")column_count = 1for value in td:if column_count == 2:Denomination = value.textprint "Deno: "+DenominationDenomination = float(Denomination)column_count = column_count+1if Denomination < 10:breakelif column_count ==7:Talktime = value.textprint "Talktime String: "+TalktimeTalktime = float(Talktime)print "Talktime: ",print Talktimecolumn_count = column_count+1elif column_count ==4:RechargeType = value.textcolumn_count = column_count+1print "RechargeType: "+RechargeTypeelif column_count ==11:Benefit = value.textcolumn_count = column_count+1elif column_count ==13:Validity = value.textcolumn_count = column_count+1print "Validity: "+Validityelif column_count ==15:Deduction = value.textprint 'Deduction: '+DeductionDeduction = float(Deduction)column_count = column_count+1if Deduction > (Denomination/2):IsSpecial = 2else:IsSpecial = 1if Validity == '-' or Validity == 'NA' or Validity =='na' or Validity =='nil' or Validity =='' or Validity =='Nil' or Validity =='NIL':Validity = '0 days'if IsSpecial ==1 and (Validity =='lifetime' or Validity =='Lifetime' or Validity =='life time' or Validity=='Life Time' or Validity =='Life time' or Validity =='Lifetime Validity' or Validity== 'UNLIMITED' or Validity== 'unlimited' or Validity== 'Unlimited'):Validity='0 days'if 'Full Talktime' in Benefit:print "****-----Full Talktime----****"if not('Full Talktime' in Benefit) and listCircle[j][3] == 1 and Denomination > 1000 and IsSpecial ==1:print "Skipping Bogus Plans"breakif not('Full Talktime' in Benefit) and listCircle[j][3] == 1 and Denomination%100 !=0 and Denomination > 50 and IsSpecial ==1:print "Skipping Bogus Plans"breakif IsSpecial ==1:Benefit = str(Talktime)Benefit = "Talktime of Rs "+Benefitelse:print "Benefit: "+Benefitcursor = db.cursor()sql = '''INSERT INTO rechargedenomination (operatorId, circleId, denominationType, validity, amount, description)\VALUES ('%d', '%d', '%d', '%s', '%s', "%s")''' % \(25, listCircle[j][2], IsSpecial, Validity, Denomination, Benefit)cursor.execute(sql)db.commit()else:column_count = column_count+1start = start+10pageno = pageno+1j = j+1db.close()