爬取豆瓣网站的电影和电视的信息(可以用selenium)
a.要求10部电影和10部电视剧
b.作品上映时间跨度从2018-2021
c.作品评分7分以上
d.作品分类不限,可以按照地区,或者类型
e.要求运行完程序以后,在源代码文件夹里面,有一个名为douban的文件夹。
f.在douban文件夹中,有2个文件夹,一个文件夹名为movie,另一个名为series,每个文件夹里面的子文件夹以作品发布时间+作品名称作为文件名
g.movie文件夹里面有10个子文件夹,代表10部电影
h.series文件夹里面有10个子文件夹,代表10部电视剧
i.作品文件夹里面的内容有两个,一个是作品在豆瓣的封面图,一个是info.text
j.info.text里面有作品的基本内容,名称,上映年份,导演,主演,作品简介,豆瓣关于这个作品的链接
(不要用xpath,尽量不要用def)
用python解决一下问题,易懂
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- CSDN专家-showbo 2021-12-29 17:14关注
题主要的代码如下,里面有有注释
from bs4 import BeautifulSoup import os import requests import time #列表接口网址 tmpurl="https://movie.douban.com/j/search_subjects?type={0}&tag=%E7%83%AD%E9%97%A8&sort=time&page_limit=20&page_start={1}" headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', 'Referer':'https://movie.douban.com/'} maxcount=10 score=7 minyear=2018 types={'movie':'movie','tv':'series'}#电影,电视剧类型及目录隐射 for type,value in types.items(): count=0 print('正在下载'+type) for i in range(10):#由于有评分和时间限制,所以采集10页的结果应该可以够10个页面了 url=tmpurl.format(type,i*20)#填充网址模板需要的数据,如信息类型,采集的页数 #print(url) data=requests.get(url,headers=headers).json()#列表返回的是json数据,直接获取json对象 for item in data['subjects']: if item['rate']!='' and float(item['rate'])>score:#满足分数 html=requests.get(item['url'],headers=headers).text#下载详细页面的html soup=BeautifulSoup(html,'lxml') #获取年份 year=soup.select('h1 span.year') #print(year) if len(year)>0: year=year[0].text.replace('(','').replace(')','') if int(year)>=minyear:#满足年份 title=item['title'].replace('/','').replace('\\','') folder="douban/"+value+"/"+year+title#目录 os.makedirs(folder)#创建目录 #下载封面图片 req=requests.get(item['cover'],headers=headers) with open(folder+"/"+title+".jpg","wb") as f: f.write(req.content) #info.txt文件信息获取 #名称,上映年份,导演,主演,作品简介,豆瓣关于这个作品的链接 s='评分:'+item['rate']+'\r\n链接:'+item['url']+"\r\n"+"名称:"+item['title'] s+=soup.select('#info')[0].text #作品简介 s+=soup.select('#link-report')[0].text with open(folder+"/info.txt","w") as f: f.writelines(s) print(item['title']+'下载完毕') count+=1 if count>=maxcount:#满足采集的数量退出 break time.sleep(5)#暂停5s,要不太快会被反扒禁止ip,需要登录系统 time.sleep(2)#暂停2s if count>=maxcount:#满足采集的数量退出 break print(type+'处理完毕')
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 微信会员卡接入微信支付商户号收款
- ¥15 如何获取烟草零售终端数据
- ¥15 数学建模招标中位数问题
- ¥15 phython路径名过长报错 不知道什么问题
- ¥15 深度学习中模型转换该怎么实现
- ¥15 HLs设计手写数字识别程序编译通不过
- ¥15 Stata外部命令安装问题求帮助!
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向
- ¥15 如何用python向钉钉机器人发送可以放大的图片?