返回列表 发新帖

python 爬取《仙剑奇侠传一》

[复制链接]

20

主题

599

帖子

2566

积分

大学生

Rank: 5Rank: 5

金币
863
好评
2
贡献
0

考神

发表于 2021-1-6 09:28:48 | 显示全部楼层 | 阅读模式
本帖最后由 608岁的老头 于 2021-1-6 10:11 编辑

没有用多线程,所以爬取速度极慢,只是用于PC—window
  1. # -*- coding: utf-8 -*-
  2. import json

  3. import os

  4. import requests

  5. from lxml import etree

  6. import re

  7. address = "http://www.diezhan.me/"
  8. #获取谍战迷网站中仙剑的集数列表
  9. index = requests.get("http://www.diezhan.me/dalu/xianjianqixiachuandiyibu");
  10. index.encoding = "UTF-8"
  11. #print(index.text)
  12. #将请求后的响应的文本转换为Html
  13. indexHtml = etree.HTML(index.text)
  14. #找到播放列表获取播放网页地址
  15. vedioList = indexHtml.xpath("//div[@id='playlist1']/ul/li/a/@href")
  16. i = 1
  17. for vedioAddress in vedioList:
  18.     #获取单集的播放网页
  19.     vedioHtml = requests.get(address + vedioAddress)
  20.     vedioHtml.encoding = "UTF-8"
  21.     #将请求后的响应的文本转换为Html
  22.     #print(vedioHtml.text)
  23.     vedioText = etree.HTML(vedioHtml.text)
  24.     vedioSrc = vedioText.xpath("//div[@class='embed-responsive clearfix']/script/text()")
  25.     #取得播放源
  26.     srcAddress = vedioSrc[0].split(';')[3].split('"')[1].split('"')[0];
  27.     #取得m3u8的请求地址
  28.     sendAddress = srcAddress.split("index")[0]
  29.     tsAddress = requests.get(srcAddress)
  30.     for m3u8 in tsAddress.text.split('\n'):
  31.         if(".m3u8" in m3u8):
  32.             sendAddress += m3u8
  33.     #再次发送请求取得ts片段
  34.     tsResponse = requests.get(sendAddress)
  35.     for ts in tsResponse.text.split('\n'):
  36.         if(".ts" in ts):
  37.             #请求获取ts片段的数据
  38.             tsData = requests.get(sendAddress.split("index")[0] + ts)
  39.             filename = ("E:/result/").encode("utf-8").decode("utf-8") + ts
  40.             with open(filename,mode="wb") as fs:
  41.                 fs.write(tsData.content)
  42.                 fs.flush()
  43.             print("已下载"+ts)
  44.     print("开始执行cmd指令")
  45.     os.system("copy /b E:\\result\\*.ts E:\\result\"+str(i)+".mp4")
  46.     os.system("del E:\\result\\*.ts")
  47.     print("E:/result/"+str(i)+".mp4 下载完成")
  48.     i = i+1


复制代码

回复

使用道具 举报

7

主题

588

帖子

2143

积分

大学生

Rank: 5Rank: 5

金币
499
好评
0
贡献
0
发表于 2021-1-6 09:37:44 来自手机  | 显示全部楼层
学习。。。。。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表