爬取豆瓣网站的电影和电视的信息(可以用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)
![](https://profile-avatar.csdnimg.cn/d962169f98554de4bf53338a4d515ae7_qq_53186202.jpg!4)
用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 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵