Python一点应用
来源:互联网 发布:申请域名 编辑:程序博客网 时间:2024/05/16 07:15
闲来无事用Python写了点小工具
@Author:Quinn chen
@Data :2017/8/24
使用pycharm和Anaconda3,python版本2.7
目录结构,黑线划掉是不需要的
1.利用request来抓取baidu热点信息
使用了两次正则分别匹配值热点的标题和URl将获取的数据保存为json格式的文件,引入了json的model<hr># -*- coding: UTF-8 -*-import requestsimport sysimport refrom tool.json.jsontool import *# 下面三行是编码转换的功能reload(sys)sys.setdefaultencoding("utf-8")def catchbadu(traget_url): # hea是我们自己构造的一个字典,里面保存了user-agent。 # 让目标网站误以为本程序是浏览器,并非爬虫。 # 从网站的Requests Header中获取。【审查元素】 hea = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36', 'Accept': 'text / html, application / xhtml + xml, application / xml q = 0.9, * / *;q = 0.8', 'Accept - Language': 'en - US, en;q = 0.5' } html = requests.get(traget_url, headers=hea) html.encoding = 'gb2312' # 这一行是将编码转为utf-8否则中文会显示乱码。 #[\u2E80-\u9FFF]+$ # 此为正则表达式部分。找到规律,利用正则,内容就可以出来 urls = [['hot标题', 'hot网址']]; title = re.findall('<td class="keyword">(.*?)</td>', html.text, re.S) print title; for each in title: content = []; url = re.search('http://(.*?)"',each,re.S).group().rstrip('\"') top = re.search('>(.*?)<', each, re.S).group().strip("<|>") print top +" "+ url content.append(top.encode('utf-8')) content.append(url) urls.append(content) print urls return urls store(file,data) # with open("./baidunews.json",'w') as json_file: # json.dump(urls,json_file,ensure_ascii=False)if __name__ == "__main__" : urls = catchbadu('http://top.baidu.com/buzz?b=1&fr=tph_right'); store("./baidunews.json",urls) print load("./baidunews.json")
#tool.json.jsontool使用到的json工具 # -*- coding: UTF-8 -*- import json def store(file,data): with open(file, 'w') as json_file: json_file.write(json.dumps(data)) def load(file): with open(file) as json_file: data = json.load(json_file) return data
2.python存储数据到数据库
-实现数据库连接,需要提供参数-对给定的json数据自动解析json头格式,创建数据库和数据表-功能 :数据库的数据添加,库创建,表创建,注释已经比较清楚了#mysql.py# -*- coding:utf-8 -*-import pymysqlimport types import osfrom tool.json.jsontool import *#数据库参数host="localhost"user='root'passwd='root'port=3306charset='UTF8'# 打开数据库连接,返回连接对象def connectMysql(host,user,passwd,port,charset): return pymysql.connect(host=host,user=user,passwd=passwd,port=port,charset=charset)#判断数据库是否存在,存在返回1def isdbVailable(conn,db): curs = conn.cursor() return (curs.execute("SELECT * FROM information_schema.SCHEMATA where SCHEMA_NAME = '%s'" % db ))def isTableVailableUnderDb(conn,db,table): curs = conn.cursor() return (curs.execute("SELECT * FROM information_schema.TABLES where TABLE_NAME='%s' and TABLE_SCHEMA = '%s'" % (table ,db)))#conn 链接对象,db数据库,字段的list#添加新的字段名def createNewTable(conn,db): curs = conn.cursor()#获取游标 try: if not isdbVailable(conn,db): curs.execute("create database %s " % db); except Exception, e: print e print 'Database %s exists!' % db conn.select_db(db) # create a table named addfields try: if not isTableVailableUnderDb(conn,db,table): curs.execute("""CREATE TABLE %s ( hot_id int(5) UNSIGNED NOT NULL AUTO_INCREMENT ,PRIMARY KEY (hot_id))""" % table ); print "表创建成功" conn.commit() except Exception, e: print e conn.rollback()#修改表结构,添加新的字段def alterTable(conn,db,table,list): curs = conn.cursor() # 获取游标 try: for filed in list: curs.execute("alter table %s add %s text" % (table,filed)) print "表结构更新成功" except Exception, e: print e print "字段可能已经存在"#插入新的数据,传入参数是json格式文件路径def insertData(conn,db,table,jsondata): cursor = conn.cursor() baiduhot = load(jsondata) #更改表结构来存储数据 alterTable(conn,db,table,baiduhot[0]) sql_param = "" sql_param_num = ("%s,"*len(baiduhot[0])).rstrip(" |\,") # print sql_param_num for param in baiduhot[0]: sql_param = sql_param + param +"," sql_param=sql_param.rstrip(" \,") # print sql_param for one in baiduhot[1:]: print one[0] print one[1] sql = "INSERT INTO " + table + "("+sql_param+") VALUES (" + sql_param_num + " )" # print sql cursor.execute(sql,one) # 提交到数据库执行 conn.commit()def queryAllData(conn,db,table): conn.select_db(db) curs = conn.cursor() # 获取游标 curs.execute("select * from %s" % table); # 获取所有记录列表 results = curs.fetchall() for one in results: for part in one: if isinstance(part,types.IntType): print part else: print part.encode('utf-8')#提交操作,关闭连接def save(conn): # this is very important curs=conn.cursor() conn.commit() curs.close() conn.close()if __name__ == "__main__": conn = connectMysql(host,user,passwd,port,charset); db = "dbbaiduhot"; table = "tbaiduhot" jsondata = os.path.dirname(os.getcwd())+"\\..\\web\\baidunews.json" createNewTable(conn,db) insertData(conn, db, table, jsondata) # # queryAllData(conn,db,table); # save(conn)
最后打算完成获取热点信息到数据库的多线程任务,并计划执行,实时获取热点信息,并可以按照热点的搜索次数,对热点进行分析,如何分析作图还在思考中….
阅读全文
0 0
- Python一点应用
- ORACL一点应用
- 学习python一点心得
- Python的一点理解
- 一点Python学习资源
- python class 一点总结
- 一点python基础知识
- 学一点记一点之Python
- CFileDialog应用中的一点说明
- CFileDialog应用中的一点说明
- QTimer,QTime的一点应用
- QTimer,QTime的一点应用
- QTimer,QTime的一点应用
- WindowsXP应用技巧一点通
- 反射的一点小应用
- unsigned long的一点应用
- Aforge的一点简单应用
- 有关set的一点应用
- LESS CSS学习
- JavaScript判断奇偶数
- Java Swing中添加图标、对话框、分割线、信息提示、面板的使用
- TypeError: Input 'b' of 'MatMul' Op has type float32 that does not match type int32 of argument 'a'.
- 这个图像处理,把电脑直接卡死,求解各路大神的优化方法
- Python一点应用
- Codeforces Round #409 二分
- HDU
- 全志A83T平台调试MIPI DSI屏幕心得
- Linux 禁止某个IP访问服务器
- PCL无法打开各种lib的解决方式
- Cool Edit之扫频波的生成
- 《剑指offer2》问题10 青蛙跳台阶&&变态跳台阶 Java实现
- 最大乘积和