网购现如今已经成了堪比逛街乐趣的存在,面对着琳琅满目的商品大家依旧能找出心意商品,但是看看微信钱包和支付宝余额只能默默的把心爱的商品加入购物车,每日都期盼着它减价。今天我就教大家如何解封双手,就能知道你心爱商品减价了。
基本步骤
1、手动登录淘宝账号,获取cookies。
2、使用selenium模拟登录添加cookies爬取对应商品价格和名称
3、把数据存入MySQL方便调用
4、适当方便提醒自己今日商品减价
如何加入cookies
cookie是一种服务器留在用户计算机上的小文件。保存特定于特定客户端和网站的适量数据,并且可以由 Web 服务器或客户端浏览器访问。cookie 常用于识别用户。cookies常常保存在网页的请求头里。通过以下语句在打开网页时注入cookies字段。
#读取cookies
with open('Cookies.txt','r',encoding='utf8')as f:
listCookies = json.loads(f.read())
#如果有cookies,清除cookies
browser.driver.delete_all_cookies()
#添加cookies
for cookie in listCookies:
browser.driver.add_cookie(cookie)
#等待网页添加cookies
time.sleep(1)
#刷新页面
browser.driver.refresh()
在注入cookies后,重新打开网页地址,通过browser.visit(网页地址)方法。值得注意的是要时长等等网页刷新防止获取网页源代码失败。
browser = Browser(driver_name=browser_name, executable_path=driver_path,incognito=True) # 打开浏览器 service_log_path='log.log'
browser.visit(base_url)
打开网页后,利用lxml库中的etree解析网页,获取到源代码后通过xpath方法定位价格和商品名称。
#取得名称
mingcheng=etree_html.xpath('//*[@id="root"]/div/div[2]/div[2]/div[2]/div[2]/div[1]/div/div[1]/div/div[3]/span[3]/text()')
#取得活动前价格
jiage=etree_html.xpath('//*[@id="root"]/div/div[2]/div[2]/div[1]/div/div[2]/div[2]/div/div[2]/div/div/div[1]/span[3]/text()')
链接MySQL
首先要*载下**MySQL并注册用户,建立相应的数据库保存数据。MySQL安装教程可以去菜鸟教材里找到。
链接本地数据库。
pymysql.connect(host='localhost', user='用户', password='xxxxxx', database='数据库名称')
建立游标。
mysql.cursor()
通过coursor*ex.e**cute('MySQL')方法执行MySQL语句。
链接后记得要关闭链接哦!不然后面可能会出现不少问题。
cursor.close()
mysql.close()
最后要想每天都监控价格变化记得要加入任务执行文件哦!再结合特定的方法当价格下降到一定程度的时候提醒你就可以既省钱又能装了。
附上全部代码:
from splinter.browser import Browser
import json
import datetime
from lxml import etree
import pymysql
import time
def url(shangpingdizi):
browser = None
browser_name = "chrome" # 浏览器名
driver_path = "chromedriver*ex.e**" # 打开浏览器的驱动
base_url = "https://taobao.com/" #
browser = Browser(driver_name=browser_name, executable_path=driver_path,incognito=True) # 打开浏览器 service_log_path='log.log'
browser.visit(base_url)
try:
browser.driver.find_element_by_xpath('/html/body/div[12]/div/a').click()
except:
pass
#读取cookies
with open('F:\\toutiaohao\\frist1\\CookiesText.txt','r',encoding='utf8')as f:
listCookies = json.loads(f.read())
#如果有cookies,清除cookies
browser.driver.delete_all_cookies()
#添加cookies
for cookie in listCookies:
browser.driver.add_cookie(cookie)
#等待网页添加cookies
time.sleep(1)
#刷新页面
browser.driver.refresh()
#print("页面刷新完成!")
#商品地址
time.sleep(10)
browser.visit(shangpingdizi)
time.sleep(5)
browser.driver.refresh()
time.sleep(5)
#解析网页代码
etree_html=etree.HTML(browser.html)
#获取时间
#取得名称
mingcheng=etree_html.xpath('//*[@id="root"]/div/div[2]/div[2]/div[2]/div[2]/div[1]/div/div[1]/div/div[3]/span[3]/text()')
#取得活动前价格
jiage=etree_html.xpath('//*[@id="root"]/div/div[2]/div[2]/div[1]/div/div[2]/div[2]/div/div[2]/div/div/div[1]/span[3]/text()')
try:
#是否有领劵优惠
houdongjie=etree_html.xpath('//*[@id="root"]/div/div[2]/div[2]/div[1]/div/div[2]/div[2]/div/div[2]/div/div/div[2]/span[3]/text()')
except:
houdongjie=['-1']
pass
browser.quit()
return mingcheng,jiage,houdongjie
def mySQL(mingcheng,jiage,houdongjie):
times=datetime.datetime.now().strftime('%Y-%m-%d')
mysql=pymysql.connect(host='localhost', user='xxxxx', password='xxxxx', database='xxxxx')
cursor=mysql.cursor()
try:
cursor*ex.e**cute("create table shangpi(name varchar(20) comment '名称',price float(20) comment '原始价格',price2 float(20) comment '劵后价格',engdata date comment '时间');")
except:
pass
sql = "INSERT INTO shangpi (name,price,price2,engdata) VALUES (%s, %s , %s , %s)"
try:
val = (mingcheng[0],jiage[0],houdongjie[0],times)
cursor*ex.e**cute(sql, val)
except:
print('数据爬取失败')
mysql.commit()
cursor.close()
mysql.close()
if __name__ == '__main__':
shangpingdizi='网页地址'
m,j,h=url(shangpingdizi)
mySQL(m,j,h)