博客
关于我
使用python将新闻爬取保存进sqlite数据库并读取输出屏幕
阅读量:746 次
发布时间:2019-03-22

本文共 4674 字,大约阅读时间需要 15 分钟。

将新闻爬取下来保存在sqlite中

直接看代码吧!

import sqlite3import urllib.requestimport re,os,sys,timeimport base64import requestsimport timeimport matplotlib.pyplot as pltimport matplotlib.image as mpingdef define():   #把新闻爬下来并保存进sqlite数据库中	conn=sqlite3.connect('news_sqlite.db')	c=conn.cursor()	url="http://news.hstc.edu.cn/info/1034/6918.htm"	htmlls=urllib.request.urlopen(url).read().decode('utf-8')	htmll= re.compile('class="(.*)
(.*?)

').findall(sign) x=0 for imgurl in imglist2: conn.execute("INSERT INTO News(id,content) VALUES(?,?)",(x,imgurl,)) #sqlite 使用?作为占位符,这样才可以存入图片。 x+=1 conn.commit() print("保存文字成功!!!") pat1='__local/.*?.jpg' imglist1 = re.compile(pat1).findall(htmlls) imglist1=list(set(imglist1)) #去重复元素 x = 0 # 遍历 for imgurl in imglist1: imgurl="http://news.hstc.edu.cn/"+imgurl#获取获得的从imglist中遍历得到的imgurl urllib.request.urlretrieve(imgurl, "D:/计科5181/xinwen{}.jpg".format(x)) print('第',x,'张') x +=1 for i in range(0,len(imglist1)): with open("D:/计科5181/xinwen{}.jpg".format(i), "rb") as f: res=base64.b64encode(f.read()) #将图片转换为字节。 c.execute("INSERT INTO Tupian VALUES(?)",(res,)) conn.commit() print("保存图片成功!!!") pat3='

(.*?)

' imglist3 = re.compile(pat3).findall(htmlls) x = 0 for imgurl in imglist3: conn.execute("update News set name=('%s') where id=('%d')"%(imgurl,x)) x+=1 conn.commit() print("保存新闻名成功") c.close() conn.close() print("保存进数据库成功!!!\n\n")

将sqlite中的数据输出屏幕

def printf():   #从数据库中读取并输出文字跟图片	conn=sqlite3.connect('news_sqlite.db')	c=conn.cursor()		c.execute("select * from News")	print("\n\n标题:\n")	for variate in c.fetchall():    #输出新闻名		print('\t\t'+variate[1])		print("\n\n")		print(variate[2])		break	c.execute("select * from News")	for variate in c.fetchall():		print(variate[2])	i = 0	c.execute("select * from Tupian")	for variate in c.fetchall():		img=base64.b64decode(variate[0])		file=open("D:/计科5181/tupian/s{}.jpg".format(i),'wb')		file.write(img)		file.close()			img=mping.imread("D:/计科5181/tupian/s{}.jpg".format(i)) #读取图片的路径。		plt.imshow(img)		plt.axis('off')#不显示坐标轴		plt.show()      #显示图片		time.sleep(2)		i+=1

完整代码

import sqlite3import urllib.requestimport re,os,sys,timeimport base64import requestsimport timeimport matplotlib.pyplot as pltimport matplotlib.image as mpingdef define():   #把新闻爬下来并保存进sqlite数据库中	conn=sqlite3.connect('news_sqlite.db')	c=conn.cursor()	url="http://news.hstc.edu.cn/info/1034/6918.htm"	htmlls=urllib.request.urlopen(url).read().decode('utf-8')	htmll= re.compile('class="(.*)
(.*?)

').findall(sign) x=0 for imgurl in imglist2: conn.execute("INSERT INTO News(id,content) VALUES(?,?)",(x,imgurl,)) x+=1 conn.commit() print("保存文字成功!!!") pat1='__local/.*?.jpg' imglist1 = re.compile(pat1).findall(htmlls) imglist1=list(set(imglist1)) #去重复元素 x = 0 # 遍历 for imgurl in imglist1: imgurl="http://news.hstc.edu.cn/"+imgurl#获取获得的从imglist中遍历得到的imgurl urllib.request.urlretrieve(imgurl, "D:/计科5181/xinwen{}.jpg".format(x)) print('第',x,'张') x +=1 for i in range(0,len(imglist1)): with open("D:/计科5181/xinwen{}.jpg".format(i), "rb") as f: res=base64.b64encode(f.read()) #将图片转换为字节。 c.execute("INSERT INTO Tupian VALUES(?)",(res,)) conn.commit() print("保存图片成功!!!") pat3='

(.*?)

' imglist3 = re.compile(pat3).findall(htmlls) x = 0 for imgurl in imglist3: conn.execute("update News set name=('%s') where id=('%d')"%(imgurl,x)) x+=1 conn.commit() print("保存新闻名成功") c.close() conn.close() print("保存进数据库成功!!!\n\n")def printf(): #从数据库中读取并输出文字跟图片 conn=sqlite3.connect('news_sqlite.db') c=conn.cursor() c.execute("select * from News") print("\n\n标题:\n") for variate in c.fetchall(): #输出新闻名 print('\t\t'+variate[1]) print("\n\n") print(variate[2]) break c.execute("select * from News") for variate in c.fetchall(): print(variate[2]) i = 0 c.execute("select * from Tupian") for variate in c.fetchall(): img=base64.b64decode(variate[0]) file=open("D:/计科5181/tupian/s{}.jpg".format(i),'wb') file.write(img) file.close() img=mping.imread("D:/计科5181/tupian/s{}.jpg".format(i)) #读取图片的路径。 plt.imshow(img) plt.axis('off')#不显示坐标轴 plt.show() #显示图片 time.sleep(2) i+=1 print("\n\n") conn=sqlite3.connect('news_sqlite.db')c=conn.cursor()try: c.execute('''CREATE TABLE News(id int,name text,content text)''') #建立保存文字的表。 c.execute('''CREATE TABLE Tupian(picture BOLB)''') #建立保存图片的表。 print("建立表成功!!!\n\n")except: print("表-Students创建成功!") while True: print("1--爬虫 2--输出 3-- 退出") sign=input("输入你的选择:") sign=int(sign) while sign not in range(1,4): sign=input("输入错误,请重新输入您的选择:") sign=int(sign) if sign==1: define() elif sign==2: printf() elif sign==3: print("退出程序!!!") break

注释

这个代码的网页是我学校的新闻网页。第一次爬取网页,正则表达式不了解,弄了很久才弄到我要的正则表达式。

链接

转载地址:http://gzewk.baihongyu.com/

你可能感兴趣的文章
NAS个人云存储服务器搭建
查看>>
nat 网卡间数据包转发_你是不是从来没有了解过光纤网卡,它跟普通网卡有什么区别?...
查看>>
NAT-DDNS内网穿透技术,解决动态域名解析难题
查看>>
NativePHP:使用PHP构建跨平台桌面应用的新框架
查看>>
Nat、端口映射、内网穿透有什么区别?
查看>>
Nat、端口映射、内网穿透有什么区别?
查看>>
nat打洞原理和实现
查看>>
NAT技术
查看>>
NAT模式下虚拟机centOs和主机ping不通解决方法
查看>>
NAT的两种模式SNAT和DNAT,到底有啥区别?
查看>>
NAT网络地址转换配置实战
查看>>
NAT网络地址转换配置详解
查看>>
Navicat for MySQL 命令列 执行SQL语句 历史日志
查看>>
Navicat for MySQL 查看BLOB字段内容
查看>>
Navicat for MySQL(Ubuntu)过期解决方法
查看>>
Navicat Premium 12 卸载和注册表的删除
查看>>
Navicat 导入sql文件
查看>>
navicat 添加外键1215错误
查看>>
navicat 系列软件一点击菜单栏就闪退
查看>>
Navicat 设置时间默认值(当前最新时间)
查看>>