#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()#退出