爬取豆瓣网站的电影和电视的信息(可以用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+'处理完毕')
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥100 求数学坐标画圆以及直线的算法
- ¥35 平滑拟合曲线该如何生成
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 自己瞎改改,结果现在又运行不了了
- ¥15 链式存储应该如何解决