喜欢看片的小伙伴,肯定想打造属于自己的私人影院,在线观看的话会有很多限制,所以可以到专门下载电影的网站下载自己想看的电影,如果想要下载大量电影的话,一个一个手动点击页面,去点击下载链接,实在让人崩溃,那么可以通过技术手段方便我们批量获取电影下载链接,看过我前面文章的小伙伴就知道了,我们可以采用python爬虫的形式去批量爬取电影下载链接,然后批量下载,岂不美哉。 对python爬虫还没有了解的小伙伴可以先看看这一片内容(基于python爬虫快速入门),上篇在html形式讲解的代码示例就以及获取了子页的链接,那么接下来将就是继续上手实战,敏感内容我会打码,主要学习的是思路。 https://mp.weixin.qq.com/s?__biz=MzkwMjMzMzU1Nw==&mid=2247483766&idx=1&sn=4ababfbb34e7723030b9d2237ad9a4b8&chksm=c0a6546cf7d1dd7a654e53b83c01be12a6b7eac2d3278048aadb71065f3b58e76e1ca975261f&token=722124151&lang=zh_CN#rd 首先我们第一步先是分析目标网站的请求结构,页面是怎么返回渲染的,分页形式是怎么样的,子页面是怎么样的形式访问,电影下载链接有没有不同形式的,所以弄大体的结构才有好的思路,把思路用代码的方式实现。 1、网站返回内容首先我们可以打开浏览器的开发工具页面(快捷键 F12),通过网络请求查看对应的请求去判断,也可以直接python写一个request请求,看看response.text返回的是不是想要的页面html。 2、url分页结构电影肯定有很多,所以制作网页的时候要采取分页展现的设计,所以要点击分页栏,查看地址栏url的变化,滚动式加载也是这种思路,观察地址栏url或者网络请求的变化。 3、子页面访问形式4、多种下载链接判断
import re import time import urllib3 import requests from lxml import etree from urllib.parse import unquote # 解决requests请求出现的InsecureRequestWarning错误 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1' } for i in range(1, 215): # 分页页面首页 indexUrl = 'https://www./html/gndy/dyzz/list_23_{}.html'.format(i) print('='*10 + indexUrl + '='*10) res = requests.get(indexUrl, headers=header, verify=False) if res.status_code == 200: lxml_tree = etree.HTML(res.content) # 获取分页页面中的电影页面路径 href_name = lxml_tree.xpath( '//div[@class='co_content8']//table//a//@href') if len(href_name) < 25: lxml_tree = etree.HTML(res.text) href_name = lxml_tree.xpath( '//div[@class='co_content8']//table//a//@href') for urlPath in href_name: if '/html/gndy/dyzz/' in urlPath: try: # 拼接详细电影页面url url = 'https://www.' + urlPath res2 = requests.get(url=url, headers=header, verify=False) if res2.status_code == 200: # 防止中文乱码 res2.encoding = 'GBK' lxml_tree2 = etree.HTML(res2.text) # 获取电影下载链接 href_name2 = lxml_tree2.xpath( '//div[@id='Zoom']//a//@href') if href_name2: # 正则匹配获取mkv或mp4格式链接或rmvb格式 pattern = re.compile(r'.*.mkv|.*.mp4|.*.rmvb') film = pattern.search(unquote(href_name2[0]))[0] print(film) # 下载链接写入文本 with open('allFilm.txt', 'a', encoding='utf-8') as f: f.write(film + '\n') else: # 记录访问错误的页面 with open('fail.txt', 'a', encoding='utf-8') as f: f.write(url + '\n') time.sleep(1) except Exception as e: print('errer: ', e) continue print('total: ', len(href_name)) |
|
来自: NeighborMrSun > 《Python爬虫》