最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程
废话不多说,请看正文!
将新闻爬取下来保存在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
注释
这个代码的网页是我学校的新闻网页。第一次爬取网页,正则表达式不了解,弄了很久才弄到我要的正则表达式。