首页 > Python资料 博客日记
python 电影网站爬虫项目_python电影网站
2024-10-28 15:00:05Python资料围观36次
(.?)
',re.S)#爬取网页
def getData(baseurl):
datalist = [] # 获取地址中的数据列表,并返回
for i in range(0,10): # 调用获取页面信息的函数10次,一次25条
url = baseurl + str(i*25)
html = askURL(url) # 保存获取到的网页源码
# 2.逐一解析数据
soup = BeautifulSoup(html,“html.parser”) # html.parser网页解析器
# find_all()是按照一定的标准,将符合要求的字符串一次性查找出来形成列表
for item in soup.find_all(‘div’,class_=“item”): # class后的 _ 表示属性值
#print(item)
data = [] # 保存一部电影的所有信息
item = str(item) # 将其转为字符串
# 提取超链接 re库用来通过正则表达式找到指定的字符串 findLink是自定义的全局变量
Link = re.findall(findLink,item)[0] # [0]第一个
data.append(Link) # 将连接追加到列表中
ImgSrc = re.findall(findImgSrc,item)[0]
data.append(ImgSrc)
Title = re.findall(findTitle,item) # 片名可能只有一个中文名没有外文名
if len(Title)==2: # 判断有几个titles
ctitle = Title[0] # 添加中文名
data.append(ctitle)
otitle = Title[1].replace("/","") # 去掉/
data.append(otitle) # 添加外文名
else:
data.append(Title[0])
data.append(' ') # 第二个留空
Rating = re.findall(findRating,item)[0]
data.append(Rating) # 添加评分
Judge = re.findall(findJudge,item)[0]
data.append(Judge) # 添加人数
Inq = re.findall(findInq,item)
if len(Inq) !=0: # 有概述
Inq = Inq[0].replace("。","") # 替换。
data.append(Inq)
else: # 没有概述
data.append(" ")
Bd = re.findall(findBd,item)[0]
# 将bd中的 <br(\s+)?/>(\s+)? 替换
Bd = re.sub('<br(\s+)?/>(\s+)?'," ",Bd)
data.append(Bd.strip()) # strip去掉前后空格
datalist.append(data) #把处理好的一个电影信息存储到datalist中
#解析网页
return datalist
#获取指定一个网页内容
def askURL(url):
head = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.116 Safari/537.36”
} #伪装成网页的形式,请求网页信息
request = urllib.request.Request(url,headers=head)
html = “” # 存放到html中
try: # 防止出现意外
response = urllib.request.urlopen(request)
html = response.read().decode(“utf-8”) # 读取response
#print(html)
except urllib.error.URLError as e: # 捕获404 500 等浏览器错误
if hasattr(e,“code”): #将其输出
print(e.code)
if hasattr(e,“reason”): # 输出没有捕获成功的原因
print(e.reason)
return html
#保存数据
def saveData(datalist,savepath):
print(“save…”)
book = xlwt.Workbook(encoding=“utf-8”,style_compression=0) # style_compression样式压缩效果
sheet = book.add_sheet(‘豆瓣电影Top250’,cell_overwrite_ok=True) #cell_overwrite_ok单元格覆盖
col = (“电影详情链接”,“封面链接”,“影片中文名”,“影片外国名”,“评分”,“评价数”,“概况”,“相关信息”,“”) # 列属性
for i in range(0,8): # 写列名
sheet.write(0,i,col[i])
for i in range(0,250):
print(“第%d条”%(i+1))
data = datalist[i]
for j in range(0,8):
sheet.write(i+1,j,data[j]) #
book.save(‘豆瓣电影Top250.xls’)
def saveData_db(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 or index == 5:
continue
data[index] = ‘"’+data[index]+‘"’
sql = ‘’’
insert into movie250 (
info_link, pic_link,cname,ename,score,rated,introduction,info)
values(%s) ‘’'%“,”.join(data)
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
def init_db(dbpath):
sql = ‘’’
create table movie250
(
id integer primary key autoincrement,
info_link text,
pic_link text,
cname varchar,
ename varchar,
score numeric,
rated numeric,
introduction text,
info text
)
‘’’
conn = sqlite3.connect(dbpath) # 创建数据库
cursor = conn.cursor() # 获取游标。获取操作的数据库对象
cursor.execute(sql) #执行sql语句
conn.commit() # 提交
conn.close() #关闭数据库文件
main()
print(“爬取完毕”)
## 然后运行代码
save…
第1条
第2条
第3条
第4条
第5条
第6条
第7条
第8条
第9条
第10条
第11条
第12条
第13条
第14条
第15条
第16条
第17条
第18条
第19条
第20条
第21条
第22条
第23条
第24条
第25条
第26条
第27条
第28条
第29条
第30条
第31条
第32条
第33条
第34条
第35条
第36条
第37条
第38条
第39条
第40条
第41条
第42条
第43条
第44条
第45条
第46条
第47条
第48条
第49条
第50条
第51条
第52条
第53条
第54条
第55条
第56条
第57条
第58条
第59条
第60条
第61条
第62条
第63条
第64条
第65条
第66条
第67条
第68条
第69条
第70条
第71条
第72条
第73条
第74条
第75条
第76条
第77条
第78条
第79条
第80条
第81条
第82条
第83条
第84条
第85条
第86条
第87条
第88条
第89条
第90条
第91条
第92条
第93条
第94条
第95条
第96条
第97条
第98条
第99条
第100条
第101条
第102条
第103条
第104条
第105条
第106条
第107条
第108条
第109条
第110条
第111条
第112条
第113条
第114条
第115条
第116条
第117条
第118条
第119条
第120条
第121条
第122条
第123条
第124条
第125条
第126条
第127条
第128条
第129条
第130条
第131条
第132条
第133条
第134条
第135条
第136条
第137条
第138条
第139条
第140条
第141条
第142条
第143条
第144条
第145条
第146条
第147条
第148条
第149条
第150条
第151条
第152条
第153条
第154条
第155条
第156条
第157条
第158条
第159条
第160条
第161条
第162条
第163条
第164条
第165条
第166条
第167条
第168条
第169条
第170条
第171条
第172条
第173条
第174条
第175条
第176条
第177条
第178条
第179条
第180条
第181条
第182条
第183条
第184条
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj