使用python将新闻爬取保存进sqlite数据库并读取输出屏幕

最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程

废话不多说,请看正文!

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

直接看代码吧!

import sqlite3
import urllib.request
import re,os,sys,time
import base64
import requests
import time
import matplotlib.pyplot as plt
import matplotlib.image as mping

def 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="(.*)<p').findall(htmlls)
	for sign in htmll:
		imglist2 = re.compile('<p>(.*?)</p>').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='<h1 align="center" style="TEXT-ALIGN: center;LINE-HEIGHT: 26pt;FONT-FAMILY: 黑体;COLOR: #000066;FONT-SIZE: 15pt">(.*?)</h1>'
	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 sqlite3
import urllib.request
import re,os,sys,time
import base64
import requests
import time
import matplotlib.pyplot as plt
import matplotlib.image as mping

def 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="(.*)<p').findall(htmlls)
	for sign in htmll:
		imglist2 = re.compile('<p>(.*?)</p>').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='<h1 align="center" style="TEXT-ALIGN: center;LINE-HEIGHT: 26pt;FONT-FAMILY: 黑体;COLOR: #000066;FONT-SIZE: 15pt">(.*?)</h1>'
	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

注释

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

链接

使用python将图片存入sqlite数据库中并显示

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zpeien

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值