提取网站上视频播放地址,然后放到txt文件里面去

  • 结果显示为:
  • \"爬取结果\"
  • 可以再写一个程序,按行读取,用json转成字典,然后只需要输入电视剧名称和集数就可以播放了,观看地址空出来的位置天上集数就行了
  • 当然这个网站貌似所有的电视剧播放地址都是网页后加电视剧名称加播放类型然后集数,根本就不用爬……

完整程序:

# coding=utf-8
import requests
from l  import etree
import json
import re

class MoviePathSpider:

    def __init__(self):
        # 设置首页地址,留出空位翻页
        self.start_url = \"https://www.dsmi.cc/list/______1_{}.html\"
         # 如果有必要就用代理咯
         # self.proxies = {\"hettp\" : \"219.141.153.11:80\"}
        self.headers = {\"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36\"}
        self.sleep_time = 1
        # 提前写好的,每一级选取位置,查看网站响应得到的
        self.path_1 = \"//div[@class=\'dhp\']\"
        self.path_2 =\"//ul[@class=\'mn_list_li_movie\']\"

    def parse_url(self, url):
        # 发送请求获取响应
        respons = requests.get(url, headers=self.headers)
        return respons.content.decode()

    def get_content_list(self, html_str):
        # 分析1级响应
        html = etree.HTML(html_str)
        # 从一级选取位置获取二级选取位置的list
        div_list = html.xpath(self.path_1)
        for div in div_list:
            item = {}
            # 提取信息:或者是名字,或者是标题
            s_name =  \"./a/@ \"
            # 提取地址
            s_url =  \"./a/@href\"
            item[\"name\"] = div.xpath(s_name)[0] if len(div.xpath(s_name)) > 0 else None
            use_url = (\"https://www.dsmi.cc\"+div.xpath(s_url)[0]) if len(div.xpath(s_url)) > 0 else None
            item[\"观看地址\"] = re.match(\"(.*?/)index.html\", use_url).group(1) + \"m3u8-1-\"
            # print(item[\"true_url\"])
            # # print(item)
            if use_url:
                # 获取二级回应,并发起二级分析
                str_2 = self.parse_url(use_url)
                item[\"集数\"] = self.get_content_list_2(str_2)
                print(item)
                self.save_path(item)

    def get_content_list_2(self, html_str):
        # 分析2级响应
        html = etree.HTML(html_str)
        # 从一级选取位置获取二级选取位置的list
        div_list = html.xpath(self.path_2)
        # for div in div_list:    # 备用选项,有的不用这个的,和下面那个互换
        if div_list:
            div = div_list[0]
            return (len(div))
        else:
            div = None
            return(div)



    def save_path(self, item):
        # 将爬取到的内容保存到字典,每一行一个电视剧信息,将来要用的时候按行读取就可以了
        with open(\"./img/tvb电视剧-\"+str(self.num) + \".txt\", \"a\", encoding=\"utf-8\") as f:
            f.write(json.dumps(item, ensure_ascii=False))
            f.write(\"\\n\")
        print(\"保存成功\")

    def run(self):
        # 定义要爬取的初始页面
        self.num = 44
        # 定义要爬取多少页
        cont_num = self.num +19
        while self.num < cont_num:
            # 构造url
            url = self.start_url.format(self.num)
            html_str = self.parse_url(url)
            self.get_content_list(html_str)
            self.num += 1
        print(self.num, self.sleep_time)


if __name__ == \'__main__\':
    movie_path_spider = MoviePathSpider()
    MoviePathSpider.run()

最后要说的

  • 写的比较简单,毕竟非专业人士,小白,单线程完成的,没有异常捕获,没有框架,没有代理池,随着技术进步可能会更厉害!
收藏 打印