【Python爬虫】xpath整站抓取阳光电影网电影资源

一、解析电影url
请求构造出的每个电影菜单的分页url,解析出每个电影url
二、xpath解析电影资源
对解析出来的电影url进行请求,解析出最终的电影名称 电影下载地址
三、对代码进行分装成函数

# -*- coding: utf-8 -*-
#爬虫阳光电影网  首页菜单栏解析
from lxml import etree
import requests
url='http://www.ygdy8.com'
req = requests.get(url)
status_code = req.status_code
#print(status_code)
#网页解码方式
req.encoding='gb2312'
#获取网页源码 用html变量接收 text或content
html = req.text
#print(html)
selector = etree.HTML(html)
url_list=[] #定义一个url列表
#提取菜单栏url
#infors = selector.xpath('//div[@id="menu"]/div[@class="contain"]/ul/li/a')
infros = selector.xpath('//div[@id="menu"]/div[@class="contain"]/ul/li[position()<10]/a')
#看出有多少个标签
#print(len(infors))
for info in infros:
    menu_url_1=info.xpath('@href')
    menu_name_1=info.xpath('text()')
    #print(menu_name[0],menu_url[0])
    if len(menu_name_1)==0:
        pass
    elif menu_url_1[0]=='/html/gndy/index.html':
        pass
    else:
        menu_url=url+menu_url_1[0]#menu_url=/html/gndy/dyzz/index.html
        menu_name=menu_name_1[0]
        #print(menu_name,menu_url)

        req2=requests.get(menu_url)
        req2.encoding='gb2312'
        html2=req2.text
        #print(html2)
        selector2 = etree.HTML(html2)
        page_total=selector2.xpath('//div[@class="co_content8"]/div[@class="x"]//text()')[1].split('/')[0].replace('共',' ').replace('页',' ')
        #print(len(page_total),page_total)
        # 第一次
        #list_id=selector2.xpath('//div[@class="co_content8"]/div[@class="x"]//a/@href')[0]#.split('.')[0].split('_')[1]
        # print(len(list_id),list_id)
        # http: // www.ygdy8.com / html / gndy / dyzz / index.html
        # http://www.ygdy8.com/html/gndy/dyzz/list_23_2.html
        # http: // www.ygdy8.com / html / zongyi2013 / index.html  菜单栏
        # http: // www.ygdy8.com / html / zongyi2013 / list_99_2.html  分页数 要用list_99_2.html替换index.html
        #第二次
        list_id = selector2.xpath('//div[@class="co_content8"]/div[@class="x"]//a/@href')[0].replace('2.html','')
        #replace这里替换的''里面不能加空格否则right_url会有多余空格
        #print(list_id)
        for i in range(1,int(page_total)+1):#int(page_total)循环范围不包括page_total,要+1
            right_url=list_id + str(i)

            fenye_url=menu_url.replace('index',right_url)
            #print(menu_url, right_url, fenye_url)
            url_list.append(fenye_url)


#print(len(url_list))
#请求下载各分页url页面,解析出电影url
for fenye_url in url_list:
    req3=requests.get(fenye_url)
    req3.encoding = 'gb2312'
    html3 = req3.text
    selector3 = etree.HTML(html3)
    #定位分页的电影单页
    infos3=selector3.xpath('//div[@class="co_content8"]//a[@class="ulink"]/@href')
    for info3 in infos3:
        #/html/gndy/dyzz/20170725/54594.html
        #http://www.ygdy8.com/html/gndy/dyzz/20170725/54594.html
        moive_url='http://www.ygdy8.com'+str(info3)
        #print(fenye_url,move_url)
        req4 = requests.get(moive_url)
        req4.encoding = 'gb2312'
        html4 = req4.text
        selector4 = etree.HTML(html4)
        #定位电影名称
        moive_name=selector4.xpath('//div[@class="title_all"]/h1/font/text()')[0]
        #print(moive_name)
        #定位电影下载地址
        moive_source=selector4.xpath('//td[@style="WORD-WRAP: break-word"]/a/@href')[0]
        print(fenye_url,moive_url,moive_name,moive_source)

你可能感兴趣的:(【Python爬虫】xpath整站抓取阳光电影网电影资源)