• python爬虫(十八) 电影天堂爬虫2


    现在要爬取前七页的url

    第一页:

     第二页:

     可以找到页码的一定规律

    所以代码可以为:

    def spider():
        base_url="https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html"
        for x in range(1,8):
            url=base_url.format(x)
            print(url)
    
    if __name__=='__main__':
        spider()

     然后把得到这些页面url解析,传到一个详情函数里,得到每个页面中电影的详情

    # 电影天堂爬虫
    from lxml import etree
    
    import  requests
    
    BASE_DOMAIN="https://www.dytt8.net"
    
    HEADERS={
        'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    
    }
    # 获取一页中的电影详情页url
    def get_detail_urls(url):
      response=requests.get(url,headers=HEADERS)
      text=response.text
    
      html=etree.HTML(text)
      detail_urls=html.xpath("//table[@class='tbspan']//a/@href")
      detail_urls=map(lambda url:BASE_DOMAIN+url,detail_urls)
      return detail_urls
    
    
    
    # 获取详情页的内容
    def parse_detail_page(url):
        movie = {}
        response = requests.get(url, headers=HEADERS)
    
        text = response.content
        html=etree.HTML(text)
        try:
         title=html.xpath("//div[@class='title_all']//font[@color='#07519a']/text()")[0]
         movie['title']=title
         zooms=html.xpath("//div[@id='Zoom']")[0]
    
         image=zooms.xpath(".//img/@src")[0]
         movie['image']:image
    
         def parse_info(info, rule):
             return info.replace(rule, "").strip()
         infos=zooms.xpath(".//text()")
         for index,info in enumerate(infos):
            if info.startswith("◎年  代"):
                info=parse_info(info,"◎年  代")
                movie["year"]=info
            elif info.startswith("◎产  地"):
                info=parse_info(info,"◎产  地")
                movie["country"]=info
            elif info.startswith("◎类  别"):
                info=parse_info(info,"◎类  别")
                movie["category"]=info
            elif info.startswith("◎豆瓣评分"):
                info = parse_info(info, "◎豆瓣评分")
                movie["douban_rating"] = info
            elif info.startswith("◎片  长"):
                info = parse_info(info, "◎片  长")
                movie["duration"] = info
            elif info.startswith("◎导  演"):
                info = parse_info(info, "◎导  演")
                movie["director"] = info
                # 主演是一行一个人名,如果还用上面的方法,只能得到都一个人名
            elif info.startswith("◎主  演"):
                info = parse_info(info, "◎主  演")
                actors = [info]
                # 从第二个人名开始到这个字节所有的长
                for x in range(index+1,len(infos)):
    
                    actor=infos[x].strip()
                    #除去不是主演的部分
    
                    actors.append(actor)
                    movie["actors"]=actors
    
            elif info.startswith("◎简  介"):
                info = parse_info(info, "◎简  介")
                for x in range(index+1,len(infos)):
                    porfile=infos[x].strip()
    
    
                movie["porfile"] = porfile
                return movie
        except IndexError:
            pass
    # 获取前七页的url
    def spider():
        # 要获取前七页,而且这几页的url存在一定的规律,所以在这里挖个坑
        base_url="https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html"
        # X就代表挖的坑,前七页,所以1-8
        movies=[]
        for x in range(1,8):
            # 第一个for循环,是用来控制总共有几行
            url=base_url.format(x)
            # 把获得的前七页的url传给获得电影详情页的函数,这样就可以得到前七页中所有的电影的详情页的url
            detail_urls=get_detail_urls(url)
            for detail_url in detail_urls:
                # 第二个for循环
                movie=parse_detail_page(detail_url)
                movies.append(movie)
                print(movies)
    
    if __name__=='__main__':
        spider()

  • 相关阅读:
    用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)
    程序员修炼之道第一章读后感
    c++实现线性表中的顺序表(数据结构课程作业)
    java第二次课件课后动手动脑习题整理总结(2019年9月23号)
    课堂练习判断字符串是否为回文序列
    大二上学期九月周总结报告三
    以java实现的一个简单登录界面(带验证码)
    关于二进制的原码 、反码、补码的简要解释说明
    几种方式使用
    spring配置数据源的6种方式
  • 原文地址:https://www.cnblogs.com/zhaoxinhui/p/12398305.html
Copyright © 2020-2023  润新知