PYTHON笔记第六章之sqlite3

#PM2.5数据库MD5
import sqlite3,ast,hashlib,os,requests
from bs4 import BeautifulSoup
conn=sqlite3.connect('DataBasePM25.sqlite')#开数据库
cursor=conn.cursor()#获取光标

sqlstr='''
CREATE TABLE IF NOT EXISTS TablePM25 (
  "no" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE ,
  "SiteName" TEXT NOT NULL ,
  "PM25" INTEGER)
'''
cursor.execute(sqlstr)#执行上述语句,建表

url="http://api.help.bj.cn/apis/aqilist/"
html=requests.get(url).text.encode('utf-8-sig')#获源码

md5=hashlib.md5(html).hexdigest()#求MD5码
old_md5=""

if os.path.exists('old_md5.txt'):#当前路径下存在旧MD5码
    with open('old_md5.txt','r') as f:#读打开
        old_md5=f.read()#读取
with open('old_md5.txt','w') as f:#然后写方式打开
    f.write(md5)#写入
print("old: "+old_md5)#输出旧MD5码
print("new: "+old_md5)#输出新MD5码

#sp=BeautifulSoup(html,'html.parser')#源码格式化
#jsondata=ast.literal_eval(sp.text)
#print(jsondata)
#js1=jsondata.get("aqidata")
#print(js1)

if md5 !=old_md5:#如果新旧码不同
    print("update")#输出更新
    sp=BeautifulSoup(html,'html.parser')#源码格式化
    jsondata=ast.literal_eval(sp.text)#jsondata是字典,eval & ast.literal_eval!
    #生成一字典,典内全是典,其中aqidata对应键值为一列表,表里每个元素是字典
    js1=jsondata.get("aqidata")#得到键值(GET是字典的方法)
    conn.execute("delete from TablePM25")#全部重新写入
    conn.commit()#上传确认更新
    n=1#数据库写入时的下标
    for city in js1:#遍历
        CityName=city["city"]#获得城市名
        PM25=0 if city["pm2_5"]=="" else int(city["pm2_5"])#赋值
        print("city:{} PM2.5={}".format(CityName,PM25))#输出
        sqlstr="insert into TablePM25 values({},'{}',{})".format(n,CityName,PM25)#SQL语法
        cursor.execute(sqlstr)#执行上述语句,把信息插入到数据库
        n+=1#当前数据库条目数加一
        conn.commit()#上传确认更新
else:#如果新旧码相同
    print("database")#输出来自库
    cursor=conn.execute("select * from TablePM25")#执行选择语句返回游标
    rows=cursor.fetchall()#读出每一行
    for row in rows:#遍历
        print("city:{} PM2.5={}".format(row[1],row[2]))#输出
conn.close()#关闭句柄
#浏览器
from selenium import webdriver    #导入网站驱动工具
url='http://www.wsbookshow.com/bookshow/jc/bk/cxsj/12442.html'  #定义网址
browser=webdriver.Chrome()  #打开浏览器
browser.get(url)            #打开网址

login_form=browser.find_element_by_id('menu_1')#通过ID找元素引号内多一空格都不行
print(login_form.text)#读出搜到的内容

username=browser.find_element_by_name('username')#通过名字来找到元素值并赋给变量
print(username.text)#读出搜到的内容
password=browser.find_element_by_name('pwd')#通过名字来找到元素值并赋给变量
print(password.text)#读出搜到的内容

login_form=browser.find_element_by_xpath('//*[@id="feedback_userbox"]')#通过xpath引用其他属性定位
print(login_form.text)#读出搜到的内容
login_form=browser.find_element_by_xpath("//input[@name='arcID']")#通过xpath引用其他属性定位
print(login_form.text)#读出搜到的内容

continue_link=browser.find_element_by_link_text('新概念英语')#通过连接文本找元素
print(continue_link.text)#读出搜到的内容
continue_link=browser.find_element_by_partial_link_text('英语')#通过连接文本找元素
print(continue_link.text)#读出搜到的内容

heading1=browser.find_element_by_tag_name('h1')#通过标签找元素
print(heading1.text)#读出搜到的内容
content=browser.find_element_by_class_name('topbanner')#通过类名找元素
print(content.text)#读出搜到的内容
content=browser.find_element_by_css_selector('.topbanner')#通过CSS选择器找元素
print(content.text)#读出搜到的内容

browser.quit()#关闭
#MD5
import hashlib,os,requests      #导入哈希库,系统库,需求库
url="http://news.sina.com.cn/"  #定义网址
html=requests.get(url).text.encode('utf-8-sig')  #获得HTML
md5=hashlib.md5(html).hexdigest()       #调用哈希库中的以16进制生成md5方法
if os.path.exists('old_md5.txt'):       #如果当前路径存在
    with open('old_md5.txt','r') as f:  #读方式打开
        old_md5=f.read()                #读
    with open('old_md5.txt','w') as f:  #写方式打开
        f.write(md5)                    #写
else:                                   #否则
    with open('old_md5.txt','w') as f:  #写方式打开
        f.write(md5)                    #写

if md5 !=old_md5:   #如果M5有变化 
    print("update") #输出更新
else:   #否则
    print("from database")  #输出数据库
#浏览器
from selenium import webdriver
from time import sleep
urls=['http://www.wsbookshow.com',
      'http://www.baidu.com',
      'http://news.sina.com.cn/']   #定义网址列表
browser=webdriver.Chrome()  #打开谷歌浏览器
browser.maximize_window     #最大化窗口
for url in urls:    #逐个网址读取
    browser.get(url)#让句柄打开网址
    sleep(3)        #每个页面延时三秒
browser.close()     #浏览器关闭
#PM2.5数据库版本
#导入数据库包+系统,请求包+分析包+重运算包
import sqlite3,os,ast,requests
from bs4 import BeautifulSoup
#数据库初始化
cur_path=os.path.dirname(__file__)#得到当前不含文件名的路径
conn=sqlite3.connect(cur_path+ '/' + 'DataBasePM25.sqlite')#连接数据库文件得句柄
cursor=conn.cursor()#得到游标
sqlstr='''
CREATE TABLE IF NOT EXISTS TablePM25 (
  "no" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE ,
  "SiteName" TEXT NOT NULL ,
  "PM25" INTEGER)
'''#定义命令串:若不存在则创建TABLEPM2.5,NO非空唯一整型关键字,SiteName非空文本,PM25整型
cursor.execute(sqlstr)#执行
#网页数据获取
url="http://api.help.bj.cn/apis/aqilist/"#一、定义网址
html=requests.get(url).text.encode('utf-8-sig')#二、获取源码
sp=BeautifulSoup(html,'html.parser')#三、分析源码(格式化)
jsondata=ast.literal_eval(sp.text)#四、重新运算求出参数的内容
js=jsondata.get("aqidata")#五、得到了字典(就是aqidata的键值)
print("update")#输出已更新
#更新数据库
conn.execute("delete from TablePM25")#先删掉表数据(不删定义不释放空间)
conn.commit()#命令确认上传(确定执行)
n=1#初始化
for city in js:#读出列表内容
    CityName=city["city"]#
    PM25=0 if city["pm2_5"]=="" else int(city["pm2_5"])#如果city["pm2_5"]==""则PM25=0否则PM25=int(city["pm2_5"])
    print("city:{} PM2.5={}".format(CityName,PM25))#输出城市及对应PM2.5
    sqlstr="insert into TablePM25 values({},'{}',{})".format(n,CityName,PM25)#插入数据库命令
    cursor.execute(sqlstr)#执行上一行指令
    n+=1#N++,此例好像没有用到
    conn.commit()#确定上传
conn.close()#关闭数据库句柄
#自动登陆
from selenium import webdriver
from time import sleep
url='http://www.51cto.com'#定义网址
browser=webdriver.Chrome()#打开浏览器并获句柄
browser.maximize_window() #最大化窗口
browser.get(url)          #打开URL
browser.find_element_by_xpath('//*[@id="login_status"]/a[1]').click()#点击登陆按钮
browser.find_element_by_xpath('//*[@id="loginform-username"]').clear()#帐户框清空
browser.find_element_by_xpath('//*[@id="loginform-username"]').send_keys('13690670863')#输入帐号
browser.find_element_by_xpath('//*[@id="loginform-password"]').clear()#密码框清空
browser.find_element_by_xpath('//*[@id="loginform-password"]').send_keys('abcde123456789')#输入密码
sleep(3)#延时三秒
browser.find_element_by_xpath('//*[@id="login-form"]/div[3]/input').click()#点击确定
sleep(3)#延时三秒
browser.quit()#退出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值