Compare commits
8 Commits
Author | SHA1 | Date |
---|---|---|
|
6a19e76574 | 3 years ago |
|
a3dccdf53b | 3 years ago |
|
f70160b0f3 | 3 years ago |
|
bd624efd2a | 3 years ago |
|
f954f9ba56 | 3 years ago |
|
ef424af5e6 | 3 years ago |
|
59aa3b8878 | 3 years ago |
|
9fb394cae9 | 3 years ago |
Binary file not shown.
Binary file not shown.
@ -1,173 +0,0 @@
|
|||||||
from flask import *
|
|
||||||
from flask import Flask
|
|
||||||
from spider import *
|
|
||||||
from word import makeWordcloud
|
|
||||||
from pypinyin import lazy_pinyin,load_single_dict
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
datalist = []
|
|
||||||
movieScore = []
|
|
||||||
num = []
|
|
||||||
page=[1,2,3,4,5,6,7,8,9,10]
|
|
||||||
@app.route('/')
|
|
||||||
def index():
|
|
||||||
return render_template('first.html')
|
|
||||||
|
|
||||||
@app.route('/first')
|
|
||||||
def first():
|
|
||||||
return index()
|
|
||||||
|
|
||||||
@app.route('/movie')
|
|
||||||
def movie():
|
|
||||||
if len(datalist) == 0:
|
|
||||||
baseurl = "https://movie.douban.com/top250?start=" # 指定的网页超链接
|
|
||||||
datalist1 = getData1(baseurl) # 返回一个装有所有数据的列表
|
|
||||||
|
|
||||||
print(datalist1)
|
|
||||||
for item in datalist1:
|
|
||||||
datalist.append(item)
|
|
||||||
saveData1(datalist1, "top250.xls")
|
|
||||||
|
|
||||||
page=1
|
|
||||||
movies=[]
|
|
||||||
#对列表进行分割
|
|
||||||
for i in range(25):
|
|
||||||
movies.append(datalist[i])
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
|
|
||||||
#进行分页
|
|
||||||
@app.route('/movie/start=<int:page>')
|
|
||||||
def movie2(page):
|
|
||||||
movies=[]
|
|
||||||
#对列表进行分割
|
|
||||||
if page: #page存在
|
|
||||||
first=(page-1)*25 #首页
|
|
||||||
last=page*25 #尾页
|
|
||||||
else :
|
|
||||||
first=0 #首页
|
|
||||||
last=25 #尾页
|
|
||||||
for i in range(first,last):
|
|
||||||
movies.append(datalist[i])
|
|
||||||
#列表分割完成
|
|
||||||
if page == 1:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 2:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 3:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 4:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 5:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 6:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 7:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 8:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 9:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
elif page == 10:
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
else :
|
|
||||||
return render_template('movie.html', movies=movies, page=page)
|
|
||||||
|
|
||||||
@app.route('/score')
|
|
||||||
def score():
|
|
||||||
if (movieScore == [] or num == []):
|
|
||||||
# print("关于评分数据库被启动了!")
|
|
||||||
con = sqlite3.connect('data.db')
|
|
||||||
cur = con.cursor()
|
|
||||||
sql = "select score,count(score) from movie250 group by score"
|
|
||||||
data = cur.execute(sql)
|
|
||||||
for item in data:
|
|
||||||
movieScore.append(item[0])
|
|
||||||
num.append(item[1])
|
|
||||||
cur.close()
|
|
||||||
con.close()
|
|
||||||
return render_template('score.html', movieScore=movieScore, num=num)
|
|
||||||
|
|
||||||
@app.route('/word')
|
|
||||||
def word():
|
|
||||||
return render_template('word.html')
|
|
||||||
|
|
||||||
# 上传文件
|
|
||||||
@app.route('/upload_file', methods=['POST', 'GET'])
|
|
||||||
def upload():
|
|
||||||
if request.method == 'POST':
|
|
||||||
f = request.files['file']
|
|
||||||
f.filename = 'upload.jpg'
|
|
||||||
f.save(f.filename)
|
|
||||||
return render_template('word.html')
|
|
||||||
|
|
||||||
@app.route('/separate')
|
|
||||||
def separate():
|
|
||||||
return render_template('separate.html')
|
|
||||||
|
|
||||||
@app.route('/team')
|
|
||||||
def team():
|
|
||||||
return render_template('team.html')
|
|
||||||
|
|
||||||
@app.route('/cities')
|
|
||||||
def cities():
|
|
||||||
return render_template('cities.html')
|
|
||||||
|
|
||||||
@app.route('/citylist')
|
|
||||||
def citylist():
|
|
||||||
load_single_dict({ord('重'): 'chong'})
|
|
||||||
datalist1 = []
|
|
||||||
cityname = request.url
|
|
||||||
print("cityname=" + cityname)
|
|
||||||
cityname = "".join(lazy_pinyin(cityname))
|
|
||||||
cityname = cityname[cityname.index('=') + 1:len(cityname)]
|
|
||||||
print("cityname=" + cityname)
|
|
||||||
|
|
||||||
baseurl = "https://movie.douban.com/cinema/nowplaying/" + cityname + '/'
|
|
||||||
dbpath = "data.db"
|
|
||||||
|
|
||||||
con = sqlite3.connect(dbpath)
|
|
||||||
cur = con.cursor()
|
|
||||||
datalist_get = getData2(baseurl)
|
|
||||||
saveData2DB2(datalist_get, dbpath)
|
|
||||||
saveData2(datalist_get,"citylist.xls")
|
|
||||||
sql = "select * from citymovies"
|
|
||||||
data = cur.execute(sql)
|
|
||||||
|
|
||||||
for item in data:
|
|
||||||
datalist1.append(item)
|
|
||||||
cur.close()
|
|
||||||
con.close()
|
|
||||||
|
|
||||||
citymovies=[]
|
|
||||||
#对列表进行分割
|
|
||||||
for i in range(len(datalist1)):
|
|
||||||
citymovies.append(datalist1[i])
|
|
||||||
return render_template('citylist.html', citymovies = citymovies)
|
|
||||||
|
|
||||||
@app.route('/citylist.xls')
|
|
||||||
def citylist_xls():
|
|
||||||
return send_from_directory("./","citylist.xls")
|
|
||||||
|
|
||||||
@app.route('/top250.xls')
|
|
||||||
def top250_xls():
|
|
||||||
return send_from_directory("./","top250.xls")
|
|
||||||
|
|
||||||
@app.route('/upload.jpg')
|
|
||||||
def upldIMG():
|
|
||||||
return send_from_directory("./","upload.jpg")
|
|
||||||
|
|
||||||
@app.route('/output.jpg')
|
|
||||||
def outJPG():
|
|
||||||
makeWordcloud("upload.jpg")
|
|
||||||
return send_from_directory("./","output.jpg")
|
|
||||||
|
|
||||||
@app.route('/updateDBTb1')
|
|
||||||
def updateDBTb1():
|
|
||||||
datalist_get = getData1("https://movie.douban.com/top250?start=")
|
|
||||||
saveData1DB1(datalist_get, "data.db")
|
|
||||||
return "数据库更新成功!"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
app.run(debug=True)
|
|
@ -0,0 +1,151 @@
|
|||||||
|
.topnav {
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: whitesmoke;
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 20px;
|
||||||
|
position: fixed;
|
||||||
|
top:0;
|
||||||
|
box-shadow: 10px 5px 15px dimgray;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topnav a{
|
||||||
|
display: inline-block;
|
||||||
|
color: black;
|
||||||
|
text-align: center;
|
||||||
|
padding: 20px 60px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topnav a:hover{
|
||||||
|
background-color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topnav a:active{
|
||||||
|
background-color: dimgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header{
|
||||||
|
background: #7ec6bc; /* fallback for old browsers */
|
||||||
|
background: -webkit-linear-gradient(to right, #ebe717, #7ec6bc); /* Chrome 10-25, Safari 5.1-6 */
|
||||||
|
background: linear-gradient(to right, #ebe717, #7ec6bc); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
||||||
|
width: 100%;
|
||||||
|
color: white;
|
||||||
|
padding: 50px 0px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 72px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topnav a:hover{
|
||||||
|
background-color: black;
|
||||||
|
color: white;
|
||||||
|
top:60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frame{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#frame iframe{
|
||||||
|
width: 100%;
|
||||||
|
height: 1800px;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.introduction{
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 500px;
|
||||||
|
padding-top: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.try{
|
||||||
|
color: white;
|
||||||
|
text-decoration-line: none;
|
||||||
|
position: relative;
|
||||||
|
top:50px;
|
||||||
|
border: none;
|
||||||
|
font-size: 20px;
|
||||||
|
background-color: black;
|
||||||
|
padding: 30px 60px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.try:hover{
|
||||||
|
background-color: dimgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title{
|
||||||
|
font-size: 72px;
|
||||||
|
position: relative;
|
||||||
|
top:-80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.playing{
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lable{
|
||||||
|
position: relative;
|
||||||
|
top:100px;
|
||||||
|
font-size: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching{
|
||||||
|
width: 100%;
|
||||||
|
height: 50px;
|
||||||
|
position: relative;
|
||||||
|
top:100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching ul{
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching ul li{
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching input{
|
||||||
|
width: 800px;
|
||||||
|
height: 80px;
|
||||||
|
font-size: 48px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching input:focus{
|
||||||
|
background-color: black;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching_logo button{
|
||||||
|
text-align: center;
|
||||||
|
border: none;
|
||||||
|
width: 88px;
|
||||||
|
height: 88px;
|
||||||
|
font-size: 48px;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searching_logo button:hover{
|
||||||
|
background-color: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.about{
|
||||||
|
width: 100%;
|
||||||
|
height: 1080px;
|
||||||
|
background-image: url("IMG_0210.JPG")}
|
||||||
|
|
||||||
|
.us{
|
||||||
|
position: relative;
|
||||||
|
top: 100px;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 60px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
@ -1,303 +0,0 @@
|
|||||||
from pypinyin import lazy_pinyin,load_single_dict
|
|
||||||
from bs4 import BeautifulSoup
|
|
||||||
import re
|
|
||||||
import urllib.error,urllib.request
|
|
||||||
import xlwt
|
|
||||||
import json
|
|
||||||
import sqlite3
|
|
||||||
import threading
|
|
||||||
global val
|
|
||||||
val = []
|
|
||||||
|
|
||||||
|
|
||||||
#对于豆瓣top250电影爬取内容的正则表达式
|
|
||||||
findLink = re.compile(r'<a href="(.*?)">')
|
|
||||||
findImgSrc = re.compile(r'<img.*src="(.*?)"',re.S)
|
|
||||||
findTitle = re.compile(r'<span class="title">(.*)</span>')
|
|
||||||
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
|
|
||||||
findJudge = re.compile(r'<span>(\d*)人评价</span>')
|
|
||||||
findBd = re.compile(r'<p class="">(.*?)</p>',re.S)
|
|
||||||
|
|
||||||
|
|
||||||
#对于豆瓣当前某城市正在上映的电影爬取内容的正则表达式
|
|
||||||
findnowmovielink = re.compile(r'.*data-psource="poster" href="(.*?)" target="_blank">',re.S)
|
|
||||||
findnowmovieimg = re.compile(r'src="(.*?)"/>')
|
|
||||||
findnowmovietitle= re.compile(r'data-title="(.*?)"')
|
|
||||||
findnowmovieactors= re.compile(r'data-actors="(.*?)"')
|
|
||||||
findnowmovietime= re.compile(r'data-duration="(.*?)"')
|
|
||||||
findnowmovieregion= re.compile(r'data-region="(.*?)"')
|
|
||||||
findnowmoviedirector= re.compile(r'data-director="(.*?)"')
|
|
||||||
findnowmovieid = re.compile(r'id="(.*?)"')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
a = input("Enter a number: ")
|
|
||||||
if a=="1":
|
|
||||||
baseurl = "https://movie.douban.com/top250?start=" #指定的网页超链接
|
|
||||||
datalist1 = getData1(baseurl) #返回一个装有所有数据的列表
|
|
||||||
savepath = ".\\top250.xls" #存储数据的文档路径
|
|
||||||
saveData1(datalist1,savepath) #存储数据
|
|
||||||
dbpath = "data.db"
|
|
||||||
saveData1DB1(datalist1,dbpath)
|
|
||||||
|
|
||||||
if a=="2":
|
|
||||||
b = input("Enter a city: ")
|
|
||||||
baseurl = "https://movie.douban.com/cinema/nowplaying/" + b + '/'
|
|
||||||
datalist2 = getData2(baseurl)
|
|
||||||
savepath = ".\\citymovies.xls"
|
|
||||||
saveData2(datalist2,savepath)
|
|
||||||
dbpath = "data.db"
|
|
||||||
saveData2DB2(datalist2, dbpath)
|
|
||||||
|
|
||||||
if a=="3": #后台更新柱状图的参数
|
|
||||||
updateCitiesData()
|
|
||||||
|
|
||||||
def multi_thread(usl1):
|
|
||||||
threads = []
|
|
||||||
for i in range(0,10):
|
|
||||||
threads.append(
|
|
||||||
threading.Thread(target = askURL1,args=(usl1+str(i*25),))
|
|
||||||
)
|
|
||||||
for thread in threads:
|
|
||||||
thread.start()
|
|
||||||
for thread in threads:
|
|
||||||
thread.join()
|
|
||||||
# print(threads)
|
|
||||||
return threads
|
|
||||||
|
|
||||||
|
|
||||||
#用于获得数据
|
|
||||||
def getData1(baseurl):
|
|
||||||
global val
|
|
||||||
datalist = [] #将获得的数据装于datalist这个列表
|
|
||||||
multi_thread(baseurl)
|
|
||||||
for j in range(0,10):
|
|
||||||
soup = BeautifulSoup(val[j],"html.parser") #解析
|
|
||||||
for item in soup.find_all('div',class_= "item"):
|
|
||||||
#print(item) #一个测试点
|
|
||||||
data = [] #将每一部电影的具体信息装入data列表
|
|
||||||
item = str(item)
|
|
||||||
link = re.findall(findLink,item)[0] #详情链接
|
|
||||||
data.append(link)
|
|
||||||
imgSrc = re.findall(findImgSrc,item)[0] #图片链接
|
|
||||||
data.append(imgSrc)
|
|
||||||
titles = re.findall(findTitle,item) #标题
|
|
||||||
if(len(titles) == 2 ):
|
|
||||||
ctitle = titles[0]
|
|
||||||
data.append(ctitle)
|
|
||||||
otitle = titles[1].replace("/","")
|
|
||||||
data.append(otitle)
|
|
||||||
else:
|
|
||||||
data.append(titles[0])
|
|
||||||
data.append(" ")
|
|
||||||
rating = re.findall(findRating,item)[0] #评分
|
|
||||||
data.append(rating)
|
|
||||||
judgeNum = re.findall(findJudge,item)[0] #评分人数
|
|
||||||
data.append(judgeNum)
|
|
||||||
bd = re.findall(findBd,item)[0] #概要
|
|
||||||
bd = re.sub('\s',"",bd)
|
|
||||||
bd = re.sub(r'/',"",bd)
|
|
||||||
bd = re.sub('<br>',"",bd)
|
|
||||||
data.append(bd.strip())
|
|
||||||
datalist.append(data) #将data列表装入datalist列表
|
|
||||||
print(datalist)
|
|
||||||
return datalist
|
|
||||||
|
|
||||||
def getData2(baseurl):
|
|
||||||
datalist = [] #将获得的数据装于datalist这个列表
|
|
||||||
html = askURL2(baseurl)
|
|
||||||
soup = BeautifulSoup(html,"html.parser") #解析
|
|
||||||
for item in soup.find_all('li',class_= "list-item"): #一个测试点
|
|
||||||
data = [] #将每一部电影的具体信息装入data列表
|
|
||||||
item = str(item)
|
|
||||||
link = re.findall(findnowmovielink,item)[0]
|
|
||||||
data.append(link)
|
|
||||||
img = re.findall(findnowmovieimg,item)[0]
|
|
||||||
data.append(img)
|
|
||||||
title = re.findall(findnowmovietitle,item)[0]
|
|
||||||
data.append(title)
|
|
||||||
director = re.findall(findnowmoviedirector, item)[0]
|
|
||||||
data.append(director)
|
|
||||||
actors = re.findall(findnowmovieactors,item)[0]
|
|
||||||
data.append(actors)
|
|
||||||
time = re.findall(findnowmovietime, item)[0]
|
|
||||||
data.append(time)
|
|
||||||
region = re.findall(findnowmovieregion, item)[0]
|
|
||||||
data.append(region)
|
|
||||||
id = re.findall(findnowmovieid,item)[0]
|
|
||||||
data.append(id)
|
|
||||||
datalist.append(data) #将data列表装入datalist列表
|
|
||||||
return datalist
|
|
||||||
|
|
||||||
#用来得到一个指定URL的网页内容(豆瓣top250)
|
|
||||||
def askURL1(url):
|
|
||||||
#伪装为浏览器
|
|
||||||
global val
|
|
||||||
head = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55"
|
|
||||||
}
|
|
||||||
resquest = urllib.request.Request(url,headers=head)
|
|
||||||
html = ""
|
|
||||||
try:
|
|
||||||
response = urllib.request.urlopen(resquest)
|
|
||||||
html = response.read().decode("utf-8")
|
|
||||||
#print(html)
|
|
||||||
except urllib.error.URLError as e:
|
|
||||||
if hasattr(e,"code"):
|
|
||||||
print(e.code)
|
|
||||||
if hasattr(e,"reason"):
|
|
||||||
print(e.reason)
|
|
||||||
val.append(html)
|
|
||||||
# print(html)
|
|
||||||
# return html
|
|
||||||
|
|
||||||
def askURL2(url):
|
|
||||||
# 伪装为浏览器
|
|
||||||
head = {
|
|
||||||
"User-Agent": " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.36"
|
|
||||||
}
|
|
||||||
resquest = urllib.request.Request(url, headers=head)
|
|
||||||
html = ""
|
|
||||||
try:
|
|
||||||
response = urllib.request.urlopen(resquest)
|
|
||||||
html = response.read().decode("utf-8")
|
|
||||||
# print(html)
|
|
||||||
except urllib.error.URLError as e:
|
|
||||||
if hasattr(e, "code"):
|
|
||||||
print(e.code)
|
|
||||||
if hasattr(e, "reason"):
|
|
||||||
print(e.reason)
|
|
||||||
return html
|
|
||||||
|
|
||||||
def init_tb1(dbpath):
|
|
||||||
sql = '''
|
|
||||||
create table if not exists movie250
|
|
||||||
(
|
|
||||||
info_link text,
|
|
||||||
pic_link text,
|
|
||||||
cname varchar ,
|
|
||||||
ename varchar ,
|
|
||||||
score numeric ,
|
|
||||||
rated numeric ,
|
|
||||||
info text
|
|
||||||
)
|
|
||||||
'''
|
|
||||||
conn = sqlite3.connect(dbpath)
|
|
||||||
cursor = conn.cursor()
|
|
||||||
|
|
||||||
cursor.execute(sql)
|
|
||||||
cursor.execute("delete from movie250 where 1=1;")
|
|
||||||
conn.commit()
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
def init_tb2(dbpath):
|
|
||||||
sql = '''
|
|
||||||
create table if not exists citymovies
|
|
||||||
(
|
|
||||||
link text,
|
|
||||||
img text,
|
|
||||||
title varchar ,
|
|
||||||
director varchar ,
|
|
||||||
actors varchar ,
|
|
||||||
times varchar ,
|
|
||||||
region varchar ,
|
|
||||||
id varchar
|
|
||||||
)
|
|
||||||
'''
|
|
||||||
conn = sqlite3.connect(dbpath)
|
|
||||||
cursor = conn.cursor()
|
|
||||||
cursor.execute(sql)
|
|
||||||
cursor.execute("delete from citymovies where 1=1;")
|
|
||||||
conn.commit()
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
def saveData1DB1(datalist,dbpath):
|
|
||||||
init_tb1(dbpath)
|
|
||||||
conn = sqlite3.connect(dbpath)
|
|
||||||
cur = conn.cursor()
|
|
||||||
for data in datalist:
|
|
||||||
for index in range(len(data)):
|
|
||||||
if index == 4 or index == 5:
|
|
||||||
continue
|
|
||||||
data[index] = '"'+data[index].strip()+'"'
|
|
||||||
sql = '''
|
|
||||||
insert into movie250(info_link,pic_link,cname,ename,score,rated,info)
|
|
||||||
values(%s)'''%",".join(data)
|
|
||||||
|
|
||||||
cur.execute(sql)
|
|
||||||
conn.commit()
|
|
||||||
cur.close()
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
def saveData2DB2(datalist,dbpath):
|
|
||||||
init_tb2(dbpath)
|
|
||||||
conn = sqlite3.connect(dbpath)
|
|
||||||
cur = conn.cursor()
|
|
||||||
for data in datalist:
|
|
||||||
for index in range(len(data)):
|
|
||||||
data[index] = '"'+data[index].strip()+'"'
|
|
||||||
sql = '''
|
|
||||||
insert into citymovies(link,img,title,director,actors,times,region,id)
|
|
||||||
values(%s)'''%",".join(data)
|
|
||||||
|
|
||||||
|
|
||||||
cur.execute(sql)
|
|
||||||
conn.commit()
|
|
||||||
cur.close()
|
|
||||||
conn.close()
|
|
||||||
|
|
||||||
def saveData1(datalist,savepath):
|
|
||||||
print("save...")
|
|
||||||
book = xlwt.Workbook(encoding="utf-8",style_compression=0)
|
|
||||||
sheet = book.add_sheet("豆瓣电影Top250",cell_overwrite_ok=True)
|
|
||||||
col = ("电影详情链接","图片链接","影片中文名字","影片外国名字","评分","评价数","相关信息")
|
|
||||||
for i in range(0,7):
|
|
||||||
sheet.write(0,i,col[i])
|
|
||||||
for i in range(0,250):
|
|
||||||
print("第%d条"%(i+1))
|
|
||||||
data = datalist[i]
|
|
||||||
for j in range(0,7):
|
|
||||||
sheet.write(i,j,data[j])
|
|
||||||
book.save(savepath)
|
|
||||||
|
|
||||||
def saveData2(datalist,savepath):
|
|
||||||
print("save...")
|
|
||||||
book = xlwt.Workbook(encoding="utf-8",style_compression=0)
|
|
||||||
sheet = book.add_sheet("豆瓣电影Top250",cell_overwrite_ok=True)
|
|
||||||
col = ("电影详情链接","图片链接","影片中文名字","导演","演员","时长","制片地区","电影id")
|
|
||||||
for i in range(0,8):
|
|
||||||
sheet.write(0,i,col[i])
|
|
||||||
for i in range(len(datalist)):
|
|
||||||
print("第%d条"%(i+1))
|
|
||||||
data = datalist[i]
|
|
||||||
for j in range(0,8):
|
|
||||||
sheet.write(i,j,data[j])
|
|
||||||
book.save(savepath)
|
|
||||||
|
|
||||||
def updateCitiesData(): #用于后台更新柱状图的参数
|
|
||||||
f = open("./static/assets/json/citiesData.json", "r" ,encoding = "utf-8")
|
|
||||||
data_dict = (dict(json.load(f)))
|
|
||||||
|
|
||||||
print(data_dict)
|
|
||||||
feature_list = data_dict["features"]
|
|
||||||
load_single_dict({ord('重'): 'chong'})
|
|
||||||
for item in feature_list:
|
|
||||||
|
|
||||||
item["properties"]["名称"] = "".join(lazy_pinyin(item["properties"]["名称"]))
|
|
||||||
|
|
||||||
cityname = item["properties"]["名称"][0:len(item["properties"]["名称"]) - 3]
|
|
||||||
|
|
||||||
print(cityname+':', end=" ")
|
|
||||||
|
|
||||||
item["properties"]["Yuanxian"] = len(getData2("https://movie.douban.com/cinema/nowplaying/" + cityname + '/'))
|
|
||||||
print(item["properties"]["Yuanxian"])
|
|
||||||
|
|
||||||
f.close()
|
|
||||||
f = open("./static/assets/json/citiesData.json", "w", encoding="GBK")
|
|
||||||
json.dump(data_dict,f)
|
|
||||||
f.close()
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
print("爬取完成!")
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -1,171 +0,0 @@
|
|||||||
/**
|
|
||||||
* Template Name: Mamba - v2.0.1
|
|
||||||
* Template URL: https://bootstrapmade.com/mamba-one-page-bootstrap-template-free/
|
|
||||||
* Author: BootstrapMade.com
|
|
||||||
* License: https://bootstrapmade.com/license/
|
|
||||||
*/
|
|
||||||
!(function($) {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
// Toggle .header-scrolled class to #header when page is scrolled
|
|
||||||
$(window).scroll(function() {
|
|
||||||
if ($(this).scrollTop() > 100) {
|
|
||||||
$('#header').addClass('header-scrolled');
|
|
||||||
} else {
|
|
||||||
$('#header').removeClass('header-scrolled');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if ($(window).scrollTop() > 100) {
|
|
||||||
$('#header').addClass('header-scrolled');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stick the header at top on scroll
|
|
||||||
$("#header").sticky({
|
|
||||||
topSpacing: 0,
|
|
||||||
zIndex: '50'
|
|
||||||
});
|
|
||||||
|
|
||||||
// Smooth scroll for the navigation menu and links with .scrollto classes
|
|
||||||
$(document).on('click', '.nav-menu a, .mobile-nav a, .scrollto', function(e) {
|
|
||||||
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
|
|
||||||
e.preventDefault();
|
|
||||||
var target = $(this.hash);
|
|
||||||
if (target.length) {
|
|
||||||
|
|
||||||
var scrollto = target.offset().top;
|
|
||||||
var scrolled = 2;
|
|
||||||
|
|
||||||
if ($('#header-sticky-wrapper').length) {
|
|
||||||
scrollto -= $('#header-sticky-wrapper').outerHeight() - scrolled;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($(this).attr("href") == '#header') {
|
|
||||||
scrollto = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$('html, body').animate({
|
|
||||||
scrollTop: scrollto
|
|
||||||
}, 1500, 'easeInOutExpo');
|
|
||||||
|
|
||||||
if ($(this).parents('.nav-menu, .mobile-nav').length) {
|
|
||||||
$('.nav-menu .active, .mobile-nav .active').removeClass('active');
|
|
||||||
$(this).closest('li').addClass('active');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($('body').hasClass('mobile-nav-active')) {
|
|
||||||
$('body').removeClass('mobile-nav-active');
|
|
||||||
$('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
|
|
||||||
$('.mobile-nav-overly').fadeOut();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Mobile Navigation
|
|
||||||
if ($('.nav-menu').length) {
|
|
||||||
var $mobile_nav = $('.nav-menu').clone().prop({
|
|
||||||
class: 'mobile-nav d-lg-none'
|
|
||||||
});
|
|
||||||
$('body').append($mobile_nav);
|
|
||||||
$('body').prepend('<button type="button" class="mobile-nav-toggle d-lg-none"><i class="icofont-navigation-menu"></i></button>');
|
|
||||||
$('body').append('<div class="mobile-nav-overly"></div>');
|
|
||||||
|
|
||||||
$(document).on('click', '.mobile-nav-toggle', function(e) {
|
|
||||||
$('body').toggleClass('mobile-nav-active');
|
|
||||||
$('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
|
|
||||||
$('.mobile-nav-overly').toggle();
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on('click', '.mobile-nav .drop-down > a', function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$(this).next().slideToggle(300);
|
|
||||||
$(this).parent().toggleClass('active');
|
|
||||||
});
|
|
||||||
|
|
||||||
$(document).click(function(e) {
|
|
||||||
var container = $(".mobile-nav, .mobile-nav-toggle");
|
|
||||||
if (!container.is(e.target) && container.has(e.target).length === 0) {
|
|
||||||
if ($('body').hasClass('mobile-nav-active')) {
|
|
||||||
$('body').removeClass('mobile-nav-active');
|
|
||||||
$('.mobile-nav-toggle i').toggleClass('icofont-navigation-menu icofont-close');
|
|
||||||
$('.mobile-nav-overly').fadeOut();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if ($(".mobile-nav, .mobile-nav-toggle").length) {
|
|
||||||
$(".mobile-nav, .mobile-nav-toggle").hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Intro carousel
|
|
||||||
var heroCarousel = $("#heroCarousel");
|
|
||||||
var heroCarouselIndicators = $("#hero-carousel-indicators");
|
|
||||||
heroCarousel.find(".carousel-inner").children(".carousel-item").each(function(index) {
|
|
||||||
(index === 0) ?
|
|
||||||
heroCarouselIndicators.append("<li data-target='#heroCarousel' data-slide-to='" + index + "' class='active'></li>"):
|
|
||||||
heroCarouselIndicators.append("<li data-target='#heroCarousel' data-slide-to='" + index + "'></li>");
|
|
||||||
});
|
|
||||||
|
|
||||||
heroCarousel.on('slid.bs.carousel', function(e) {
|
|
||||||
$(this).find('h2').addClass('animated fadeInDown');
|
|
||||||
$(this).find('p').addClass('animated fadeInUp');
|
|
||||||
$(this).find('.btn-get-started').addClass('animated fadeInUp');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Back to top button
|
|
||||||
$(window).scroll(function() {
|
|
||||||
if ($(this).scrollTop() > 100) {
|
|
||||||
$('.back-to-top').fadeIn('slow');
|
|
||||||
} else {
|
|
||||||
$('.back-to-top').fadeOut('slow');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.back-to-top').click(function() {
|
|
||||||
$('html, body').animate({
|
|
||||||
scrollTop: 0
|
|
||||||
}, 1500, 'easeInOutExpo');
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
// Initiate the venobox plugin
|
|
||||||
$(window).on('load', function() {
|
|
||||||
$('.venobox').venobox();
|
|
||||||
});
|
|
||||||
|
|
||||||
// jQuery counterUp
|
|
||||||
$('[data-toggle="counter-up"]').counterUp({
|
|
||||||
delay: 10,
|
|
||||||
time: 1000
|
|
||||||
});
|
|
||||||
|
|
||||||
// Porfolio isotope and filter
|
|
||||||
$(window).on('load', function() {
|
|
||||||
var portfolioIsotope = $('.portfolio-container').isotope({
|
|
||||||
itemSelector: '.portfolio-item',
|
|
||||||
layoutMode: 'fitRows'
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#portfolio-flters li').on('click', function() {
|
|
||||||
$("#portfolio-flters li").removeClass('filter-active');
|
|
||||||
$(this).addClass('filter-active');
|
|
||||||
|
|
||||||
portfolioIsotope.isotope({
|
|
||||||
filter: $(this).data('filter')
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Initiate venobox (lightbox feature used in portofilo)
|
|
||||||
$(document).ready(function() {
|
|
||||||
$('.venobox').venobox();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Initi AOS
|
|
||||||
AOS.init({
|
|
||||||
duration: 1000,
|
|
||||||
easing: "ease-in-out-back"
|
|
||||||
});
|
|
||||||
|
|
||||||
})(jQuery);
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,79 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>主页</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="css1.css">/*连接CSS*/
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="topnav">
|
||||||
|
<a href="#">主页</a>
|
||||||
|
<a href="#playing">正在热映</a>
|
||||||
|
<a href="#">即将上映</a>
|
||||||
|
<a href="#">TOP榜</a>
|
||||||
|
<a href="#download">下载</a>
|
||||||
|
<a href="#about">关于我们</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="header" id = "header">
|
||||||
|
<p>Python爬虫研究站</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="introduction">
|
||||||
|
<div class = "title">
|
||||||
|
<p>
|
||||||
|
在这里,可以爬取有关最近影视的相关信息。
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a class = "try" href = "#playing">尝试一下</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class = "playing" id = "playing">
|
||||||
|
<div>
|
||||||
|
<p class="lable">
|
||||||
|
键入以搜索你想要的电影:
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class = "searching" id = "searching">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<input type="text" id = "name" name = "name">
|
||||||
|
</li>
|
||||||
|
<li class="searching_logo">
|
||||||
|
<button>🔍</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id = "frame">
|
||||||
|
<iframe></iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class = "showing">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="download" id = "download">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class = "about" id = "about">
|
||||||
|
<div>
|
||||||
|
<p class = "us">关于我们</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -1,39 +0,0 @@
|
|||||||
import jieba
|
|
||||||
from matplotlib import pyplot as plt
|
|
||||||
from wordcloud import WordCloud
|
|
||||||
from PIL import Image
|
|
||||||
import numpy as np
|
|
||||||
import sqlite3
|
|
||||||
|
|
||||||
def makeWordcloud(image_name):
|
|
||||||
con = sqlite3.connect('data.db')
|
|
||||||
cur = con.cursor()
|
|
||||||
sql = 'select info from movie250 '
|
|
||||||
data = cur.execute(sql)
|
|
||||||
text = ""
|
|
||||||
for item in data:
|
|
||||||
text = text + item[0]
|
|
||||||
cur.close()
|
|
||||||
con.close()
|
|
||||||
cut = jieba.cut(text)
|
|
||||||
string = ' '.join(cut)
|
|
||||||
img = Image.open(image_name)
|
|
||||||
img_array = np.array(img)
|
|
||||||
wc = WordCloud(
|
|
||||||
# background_color = 'white',
|
|
||||||
# mask = img_array,
|
|
||||||
# font_path = 'simsun.ttc'
|
|
||||||
font_path="msyhbd.ttc",
|
|
||||||
mask=img_array,
|
|
||||||
width=1500,
|
|
||||||
height=1000,
|
|
||||||
background_color="white",
|
|
||||||
min_font_size=5,
|
|
||||||
max_font_size=120,
|
|
||||||
max_words=600
|
|
||||||
)
|
|
||||||
wc.generate_from_text(string)
|
|
||||||
fig = plt.figure(1)
|
|
||||||
plt.imshow(wc)
|
|
||||||
plt.axis('off')
|
|
||||||
plt.savefig('output.jpg', dpi=1600)
|
|
Loading…
Reference in new issue