真的好难懂 2021-12-29 17:00 采纳率: 50%
浏览 72
已结题

用python解决一下问题,易懂

爬取豆瓣网站的电影和电视的信息(可以用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)

  • 写回答

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+'处理完毕')
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月29日
  • 已采纳回答 12月29日
  • 创建了问题 12月29日

悬赏问题

  • ¥15 微信小程序商城如何实现多商户收款 平台分润抽成
  • ¥15 cocos的js代码调用wx.createUseInfoButton问题!
  • ¥15 关于自相关函数法和周期图法实现对随机信号的功率谱估计的matlab程序运行的问题,请各位专家解答!
  • ¥15 Python程序,深度学习,有偿私
  • ¥15 扫描枪扫条形码出现问题
  • ¥35 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3