### 一、 开发背景与环境介绍
- 豆瓣、猫眼、微博、B站等社交网络逐渐兴起,传统的网络爬虫无法满足人们对社交网络信息的爬取及分析的需求,故爬取特定主题内容的网络爬虫便应运而生,本文采用Windows 10系统及JetBrains PyCharm 2019.2.5 x64,实现了面向猫眼电影的网络爬虫,实现对猫眼Top100电影的爬取,并对得到的数据进行可视化分析及展示。
### 二、 程序功能分析
- 运行本程序,即可实现自动爬取猫眼Top100,并将所得数据存入sqlite3数据库,之后通过Flask将数据呈现在网页端。
### 三、 总体设计
1. 寻找爬虫入口,使用BeautifulSoup库解析爬取数据,将爬取到的信息保存到数据库。
2. 通过使用python的第三方库对数据库中的电影数据进行划分,提取各个属性有价值的部分,再利用html中的Flask,Echarts、WordCloud等技术,将其合理的展现在页面上,并添加”首页”,”电影”,”评分”,”词云”,”关于”标题,最后再对每个header进行一个html设计单击相关元素时进行相关页面跳转。
### 四、 详细设计
- 寻找爬取入口
在Chrome浏览器中打开猫眼电影TOP100,其Url为:https://maoyan.com/board/4?offset= 。通过观察可以发现,目标数据是存在于网页源代码中的,直接请求网页Url即可获得。同时,第1页仅显示了10部电影,相比于第2页的Url:https://maoyan.com/board/4?offset=10,故可推断offset为偏移值。
所以在抓取信息时,只需改变offset所赋予的参数(第page页的 offset=10*(page-1))就可以实现自动翻页爬取。再通过 urllib.request 获取 html,向header中添加cookie和User-Agent实现伪装,以免出现美团滑块验证,最后将数据保存在html中,以便后续利用正则表达式对数据进行分析。
- 解析数据
解析保存的html文件,使用BeautifulSoup库,根据规则找到所需的内容所在位置,把电影的各类信息解析出来(先定位到每个电影的标签,再定位到各类信息的标签,最后将各类信息从标签中提取出来)。在解析过程中应结合re正则表达式提取所需内容。
设置askURL(url)方法,并将URL作为Request()方法的参 数,构造Request对象;将Request对象作为urlopen()方法的参数,发送给远程服 务器,获取网页内容返回列表;使用read( )方法读取远程服务器返回的页面信息执行完后返回 HTML网页内容。
- 保存数据
根据前面得到的解析结果datalist将所需内容保存到sqlite3数据库中,首先建立数据库,之后再进行连接,通过for循环对datalist进行遍历,以每列的属性值作为游标,并将所有数据转换为列表,最后按数组下标对属性值实施逐行插入操作。
- 可视化数据
Python 为我们提供了用来制作图表的库函数如,matplotlib,pandas等。事实证明这些方法已经十分成功,而本文使用apache开源web可视 化库 Echarts,集合 python 语言自动生成 Echarts 图表。它不但 可以绘制图表,还可以嵌入到独立的HTML网页。具有良好的性 能,并且使用方便。
### 五、 部分源码及运行界面
```
import sqlite3
# 获取网页数据
import requests
# 正则表达式
import re
# 网页解析,获取数据
from bs4 import BeautifulSoup
# 保存为excel
import xlwt
#正则表达式规则 *表示多个字符,?表示0个到多个
#影片排名链接的规则
findIndex = re.compile(r'board-index.*?>(\d+).*?')
#影片图片的链接
findImage = re.compile(r'class="board-img".*?src="(.*?)"')
#影片片名
findTitle = re.compile(r'title="(.*?)">')
#影片主演
findActor = re.compile(r'class="star">(.|\n)(.*)')
#影片上映时间
findTime = re.compile(r'class="releasetime">(.*?)</p> ')
#猫眼评分
findScore1 = re.compile(r'class="integer">(.*?)</i>')
findScore2 = re.compile(r'class="fraction">(.*?)</i>')
# 爬取网页
# 解析数据
# 保存数据
def main():
baseurl = "https://maoyan.com/board/4?offset="
#1.爬取网页
datalist = getData(baseurl)
#3.保存数据
# savepath = "猫眼TOP100.xls"
dbpath = "movie2.db"
# saveData(datalist, savepath)
saveData2DB(datalist,dbpath)
def getData(baseUrl):
datalist = []
for i in range(0, 10):
url = baseUrl + str(i * 10)
html = askUrl(url)
# 解析数据
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all("dd"):
# 测试
# print(item)
data = []
item = str(item)
# 排名
index = re.findall(findIndex, item)[0]
data.append(index)
# 图片地址
image = re.findall(findImage, item)[0]
data.append(image)
# 标题
title = re.findall(findTitle, item)[0]
data.append(title)
# 作者
actor = re.findall(findActor, item)[0]
actorList = list(actor)
for i in actorList:
actorNew = "".join(i).strip()
data.append(actorNew)
# 上映时间
time = re.findall(findTime, item)[0]
data.append(time)
# 分数
score1 = re.findall(findScore1, item)[0]
# data.append(score1)
score2 = re.findall(findScore2, item)[0]
# data.append(score2)
score = score1 + score2
data.append(score)
# print(data)
datalist.append(data)
#print(datalist)
return datalist
# 爬取网页
def askUrl(url):
#模拟浏览器头部消息,向猫眼浏览器发送消息
headers = {
"Accept":"* / *",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Cookie":"BIDUPSID=E53D8374080760C7A143C4FD57FD9FC0; PSTM=1578902890; HMACCOUNT=6B314F8B0EFA06B7; BAIDUID=600AD9DA4AECD6C574A62250C5383D41:FG=1; BDRCVFR[Fz5t0nreVcc]=mk3SLVN4HKm; delPer=0; PSINO=6; H_PS_PSSID=; BA_HECTOR=ah0101ak2ka48k2hb31fu57qk0r; HMVT=6bcd52f51e9b3dce32bec4a3997715ac|1608687465|"}
html = ""
try:
response = requests.get(url, headers=headers)
html = response.content.decode("utf-8")
# print(html)
except requests.exceptions as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
# 保存数据到excel中
def saveData(datalist, savepath):
# 创建book对象
book = xlwt.Workbook(encoding="utf-8")
# 创建工作表
sheet = book.add_sheet("猫眼TOP100", cell_overwrite_ok=True)
col = ("电影排名", "图片地址", "电影名称", "演出人员", "上映时间", "电影评分")
for i in range(0, 6):
sheet.write(0, i, col[i])
#col[i]代表列名
for i in range(0, 100):
print("第%d条" % (i + 1))
try:
data = datalist[i]
except:
continue
for j in range(0, 6):
#向表中写入数据
sheet.write(i + 1, j, data[j])
book.save(savepath)
# 保存数据到数据库中
def saveData2DB(datalist, dbpath):
init_db(dbpath)
conn = sqlite3.connect(dbpath)
cur = conn.cursor()
for data in datalist:
for index in range(len(data)):
if index == 4:
data[index] = '"' + str(data[index]) + '"'
continue
data[index] = '"' + data[index] + '"'
sql = '''
insert into movie100(
movie_rank,image_link,name,actor,time,score
)
values(%s)''' % ",".join(data)
# values(%s)'''%",". join('%s' %a for a in data)
print(sql)
cur.execute(sql)
conn.commit()
cur.close()
co
python慕遥
- 粉丝: 3761
- 资源: 392
最新资源
- C#+wpf界面源码框架,总结运动控制路径算法而写,控件源码+模板源码,分享给想入行的朋友们,引你快速入行,大神略过,可用于激光切割,雕刻机,分板机,点胶机,插件机等,本模板主要考虑到各运动控制硬件不
- 四轮独立驱动电动汽车,四轮侧偏刚度估计,四电机模型,carsim输出真实值,ckf估计侧偏刚度,由s函数编写
- 光储直流微电网simulink仿真模型 双向变器 ,独立光伏系统能量管理,最大功率点跟踪mppt 在传统的独立光伏发电系统中,蓄电池直接与直流母线相连接,其充放电电流不能得到有效的控制,当负载突变时
- simplorer与Maxwell电机联合仿真,包含搭建好的Simplorer电机场路耦合主电路与控制算法(矢量控制SVPWM),包含电路与算法搭建的详细教 仿真文件可复制,可将教程中的电机模型成自己
- 51单片机和ADC0808数字电压表,包括程序源码和protues仿真,pcb等,程序源码注释详细,适合单片机开发人员和新手
- 剪板伺服送料机,程序,三菱,昆仑通态,送料机程序,PLC多段数据不同,可任意调节A段B段c段长度,并定长切断 程序能存储5段工件数据,使用调出非常方便 PLC程序有台达和三菱FX ,触摸屏程序有昆
- 基于等效油耗极小值算法(ecms)的并联式混合动力汽车能量管理策略一份 1.基于simulink建立车辆及控制系统模型 2.车辆为车 3.同时对于功率流分配和使用档位进行优化 4.使用二分法获得最优等
- FPGA多通道同步AD采集 AD7606 8通道16位高精度同步采集系统开发,采样率200KSPS,采集数据支持DDR3缓存、串口发送、USB2.0上传、千兆以太网上传等 支持基于FPGA的数字信
- 微电网两阶段鲁棒优化经济调度程序 关键词:微网优化调度 两阶段鲁棒 CCG算法 经济调度 参考文档:《微电网两阶段鲁棒优化经济调度方法》 仿真平台:MATLAB YALMIP+CPLEX 主要内容:构
- 基于粒子群算法的电动汽车充电站最优选址和定容 关键词:选址定容 电动汽车 充电站位置 参考文档:《电动汽车充电站的最优选址和定容》参考选址定容模型部分; 仿真平台:MATLAB 主要内容:代
- 西门子Smart200PLC一拖二热站自控系统程序,2个循环泵,2个补水泵,循环泵与补水泵采用一用一备,按设置时间自动切,硬件:西门子200smart sr30 PLC+昆仑通泰触摸屏, 程序有完整注
- 基于时间序列预测的组合模型,CNN-LSTM-Attention、CNN-GRU-Attention的深度学习神经网络的多特征用电负荷预测 关于模型算法预测值和真实值对比效果如下图所示,同时利用R2
- 电力系统静态稳定性仿真Matlab编程 simulink仿真 1.用Matlab编程,把转子运动方程(摇摆方程)在运行点处线性化,采用小信号分析法,对线性化之后状态方程的系数矩阵求解特征值,根轨迹,通
- 霍尔foc 性能超过方波 霍尔估算代码调理很清晰 正反转、迅速启动 软件和教程资料
- TMS320F28335主控+EtherCAT伺服方案
- MPC模型预测控制 通过降压变器对比了MPC和PI控制的性能 动态响应非常快,且无过冲电压 ~
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈