前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索。

友情提示:本代码用到的网址仅供交流学习使用,如有不妥,请联系删除。

背景:自己有台电脑要给老爸用,老爷子喜欢看一些大片,但是家里网络环境不好,就想批量下载一些存到电脑里。但是目前大部分的网站都是这样的,

需要一个个地点进去,才能看到下载地址

如果我要下载100部电影,那肯定手都要点断了,于是便想把这些地址给爬取出来,迅雷批量下载。

工具:python(版本3.x)

爬虫原理:网页源代码中含有下载地址,把这些零散的地址批量保存到文件中,方便使用。

干货:首先上代码,迫不及待的你可以先运行一下,再看详细介绍。

import requests
import re#changepage用来产生不同页数的链接
def changepage(url,total_page):page_group = ['https://www.dygod.net/html/gndy/jddy/index.html']for i in range(2,total_page+1):link = re.sub('jddy/index','jddy/index_'+str(i),url,re.S)page_group.append(link)return page_group
#pagelink用来产生页面内的视频链接页面
def pagelink(url):base_url = 'https://www.dygod.net/html/gndy/jddy/'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}req = requests.get(url , headers = headers)req.encoding = 'gbk'#指定编码,否则会乱码pat = re.compile('<a href="/html/gndy/jddy/(.*?)" class="ulink" title=(.*?)/a>',re.S)#获取电影列表网址reslist = re.findall(pat, req.text)finalurl = []for i in range(1,25):xurl = reslist[i][0]finalurl.append(base_url + xurl)return finalurl #返回该页面内所有的视频网页地址#getdownurl获取页面的视频地址
def getdownurl(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}req = requests.get(url , headers = headers)req.encoding = 'gbk'#指定编码,否则会乱码pat = re.compile('<a href="ftp(.*?)">ftp',re.S)#获取下载地址reslist = re.findall(pat, req.text)furl = 'ftp'+reslist[0]return furlif __name__ == "__main__" :html = "https://www.dygod.net/html/gndy/jddy/index.html"print('你即将爬取的网站是:https://www.dygod.net/html/gndy/jddy/index.html')pages = input('请输入需要爬取的页数:')p1 = changepage(html,int(pages))with open ('电影天堂下载地址.lst','w') as f :j = 0for p1i in p1 :j = j + 1print('正在爬取第%d页,网址是 %s ...'%(j,p1i))p2 = pagelink(p1i)for p2i in p2 :p3 = getdownurl(p2i)if len(p3) == 0 :passelse :finalurl = p3f.write(finalurl + '\n')print('所有页面地址爬取完毕!')

核心模块getdownurl函数:通过requests来获取页面信息,可以认为这个信息的text就是页面源代码(几乎任何一款浏览器右键都有查看网页源代码的选项),再通过re.compile正则表达式匹配的方式来匹配到网页源代码中的网址部分,可以看下图

这部分怎么提取呢?通过正则表达式匹配。怎么写这个正则表达式呢?这里用到一个简单粗暴的方法:

<a href="ftp(.*?)">ftp

爬虫中经常用到.*?来做非贪婪匹配(专业名词请百度),你可以简单认为这个(.*?)就代表你想要爬取出来的东西,这样的东西在每个网页源码中都是夹在<a href="ftp和">ftp之间的。有人可能会问,那这个匹配出来的不是网址啊,比如上图中出来的就是://d:d@dygodj8.com:12311/[电影天堂www.dy2018.com]请以你的名字呼唤我BD中英双字.mp4,前面少了个ftp啊?

是的,不过这是故意为之,如果正则表达式写成<a href="(.*?)">ftp,可能夹在<a href="和">ftp之间的东西就太多了,二次处理的成本还不如先用你觉得最快最直接的方式抽取有用信息,然后再进行拼接来得快。

代码详解:

一、getdownurl

#getdownurl获取页面的视频地址
def getdownurl(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}req = requests.get(url , headers = headers)req.encoding = 'gbk'#指定编码,否则会乱码pat = re.compile('<a href="ftp(.*?)">ftp',re.S)#获取下载地址reslist = re.findall(pat, req.text)furl = 'ftp'+reslist[0]return furl

其中headers是用来将你的脚本访问网址伪装成浏览器访问,以防有些网站进行了反爬虫的措施。这个headers在很多浏览器中也可以很容易得到,以Firefox为例,直接F12或查看元素,在网络标签,右侧的消息头中右下角即可看到。

requests模块:requests.get(url , headers = headers)是用伪装成firefox的形式获取该网页的信息。
re模块:可以参考python正则表达式的一些东西,这里用re.complile来写出匹配的模式,re.findall根据模式在网页源代码中找到相应的东西。
二、pagelink

#pagelink用来产生页面内的视频链接页面
def pagelink(url):base_url = 'https://www.dygod.net/html/gndy/jddy/'headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}req = requests.get(url , headers = headers)req.encoding = 'gbk'#指定编码,否则会乱码pat = re.compile('<a href="/html/gndy/jddy/(.*?)" class="ulink" title=(.*?)/a>',re.S)#获取电影列表网址reslist = re.findall(pat, req.text)finalurl = []for i in range(1,25):xurl = reslist[i][0]finalurl.append(base_url + xurl)return finalurl #返回该页面内所有的视频网页地址

第一步getdownurl是用于爬取一个网页的网址,这一步用于获取同一页面内所有网页的网址,像下面的网页包含很多电影链接

源码是这样的:

聪明的你一看就知道需要哪些信息,这个页面正文有25个电影链接,我这里用到一个list来存放这些网址,其实range(1,25)不包含25,也就是说我只存放了24个网址,原因是我的正则表达式写的不好,爬出来的第一个网址有问题,如果有兴趣可以研究下怎么完善。

需要一提的是这个正则表达式用到了两处.*?,所以匹配到的reslist是二维的。

三、changepage

#changepage用来产生不同页数的链接
def changepage(url,total_page):page_group = ['https://www.dygod.net/html/gndy/jddy/index.html']for i in range(2,total_page+1):link = re.sub('jddy/index','jddy/index_'+str(i),url,re.S)page_group.append(link)return page_group

这里也比较简单,点击下一页,抬头看看网址栏的网址是什么,这里是index/index_2/index_3...很容易拼接

四、main

if __name__ == "__main__" :html = "https://www.dygod.net/html/gndy/jddy/index.html"print('你即将爬取的网站是:https://www.dygod.net/html/gndy/jddy/index.html')pages = input('请输入需要爬取的页数:')p1 = changepage(html,int(pages))with open ('电影天堂下载地址.lst','w') as f :j = 0for p1i in p1 :j = j + 1print('正在爬取第%d页,网址是 %s ...'%(j,p1i))p2 = pagelink(p1i)for p2i in p2 :p3 = getdownurl(p2i)if len(p3) == 0 :passelse :finalurl = p3f.write(finalurl + '\n')print('所有页面地址爬取完毕!')

main里面几乎没什么好说的,反正就是循环读取,再往文件里写进行了。

五、运行及结果

然后迅雷就可以直接导入了。(后缀为downlist或lst迅雷可以直接导入)

后记:有些可能会觉得这样一股脑的把电影都下载下来,可能有些电影太烂,下载下来就是浪费时间和资源,而手工筛选又太费事,后续会通过数据库的方式来存储影片的信息,从而筛选出需要的地址。

Python爬虫--爬取电影天堂网站电影下载地址相关推荐

  1. 详细实例:用python爬虫爬取幽默笑话网站!(建议收藏)

    前言: 今天为大家带来的内容是详细实例:用python爬虫爬取幽默笑话网站!(建议收藏),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下! 爬取网站为 ...

  2. Python爬虫爬取ok资源网电影播放地址

    #爬取ok资源网电影播放地址#www.okzy.co #入口一:http://okzy.co/index.php?m=vod-search&wd={关键字}&submit=search ...

  3. Python爬虫爬取伯乐在线网站信息

    一.环境搭建 1.创建环境 执行pip install scrapy安装scrapy 使用scrapy startproject ArticleSpider创建scrapy项目 使用pycharm导入 ...

  4. 简单爬虫——爬取Scrape|Movie网站电影排行Top10

    1.简单说明 本教程仅用来学习,不用于商业目的.这是第一次写文章,排版可能有点差,希望大家理解,嘻嘻. 不喜欢看分析的同学可以直接跳到最后有源代码 我们要爬的网站为:https://static1.s ...

  5. Python爬虫爬取美剧网站

    一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间.之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英剧等貌似就不在像以前一样同步更新了. 但是,作为一个宅dia ...

  6. Python爬虫爬取古诗文网站项目分享

    作为一个靠python自学入门的菜鸟,想和大家分享自己写的第一个也是目前为止唯一一个爬虫代码 写爬虫要具备的能力基础:python入门基础,html5基础知识,然后这边用的是scrapy框架,所以还要 ...

  7. python 爬取百度知道,Python 爬虫爬取百度百科网站

    利用python写一个爬虫,爬取百度百科的某一个词条下面的全部链接和每一个链接内部的词条主题和摘要.利用request库爬取页面,然后利用BeautifulSoup对爬取到的页面提取url和关键内容. ...

  8. python爬虫爬取腾讯网站——实时疫情数据并生成Excel表格

    一.基本介绍: 开发背景:自从2020年新冠疫情发生后,至今为止的相关疫情数据新闻已经是非常的巨大了,我们无时不在在用数据尝试帮助我们解剖全球的疫情状况.由此可见,新冠疫情数据的新闻报道数量与国内疫情 ...

  9. python爬虫爬取ip记录网站信息并存入数据库

    1 import requests 2 import re 3 import pymysql 4 #10页 仔细观察路由 5 db = pymysql.connect("localhost& ...

  10. python爬虫网页中的图片_Python爬虫爬取一个网页上的图片地址实例代码

    本文实例主要是实现爬取一个网页上的图片地址,具体如下. 读取一个网页的源代码: import urllib.request def getHtml(url): html=urllib.request. ...

最新文章

  1. Windows 系统执行Shell 脚本的方法
  2. 玩转 iOS 开发:《iOS 设计模式 — 工厂模式》
  3. canvas做的图片查看器1
  4. linux 查看用户上次修改密码的日期
  5. 程序员捅了个P0故障,公司股价反而涨了10%!
  6. vyatta 6.4 的设置
  7. cdr 表格自动填充文字_PS那些好用到哭的新手小技巧(1)——如何快速去除文字图片的水印或背景文字?...
  8. 奥斯卡公布最佳动画长片初选名单 《哪吒》等32部动画入选
  9. 目标检测——夏侯南溪目标检测模型之输出信息显示
  10. java基础三--IO流(1)
  11. Nginx-配置https虚拟服务(访问http时自动跳转https)
  12. java 解压ygb文件_文件系统-目录项缓存与散列表
  13. 三款免费好用的代码对比工具,丢弃BeyondCompare
  14. 移动广告聚合平台经验分享:芒果、果合、KeyMob、Adview、抓猫哪家强?
  15. 北京航空航天大学计算机学院系主任,陈杰[北京航空航天大学教授] 简历
  16. html怎么设置后退链接,怎么创建HTML后退按钮?
  17. 教你炒股票29:转折的力度与级别
  18. HDU 4069 Squiggly Sudoku 【DLX+BFS】
  19. <table>表格标签属性
  20. MacBook(m1) 通过brew安装PHP环境

热门文章

  1. 查看apk包名和Activity名
  2. 迷宫里抓神兽Java游戏_塞尔达传说荒野之息全神兽迷宫进入方法 四大神兽怎么打?-游侠网...
  3. 快手短视频去水印方法
  4. 位移密码算法(js)
  5. layim在线客服 架构实现
  6. Windows系统文件浏览标签窗口工具
  7. x264代码剖析笔记
  8. Mosek 证书更新 - MATLAB
  9. 计算线性回归、指数回归公式
  10. java apdu读取社保卡_读取社保卡信息