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()

原文地址:https://www.cnblogs.com/zhaoxinhui/p/12398305.html