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

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

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

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

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

工具:python(版本3.x)

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

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

importrequestsimportre#changepage用来产生不同页数的链接

defchangepage(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)returnpage_group#pagelink用来产生页面内的视频链接页面

defpagelink(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('',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获取页面的视频地址

defgetdownurl(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('ftp',re.S)#获取下载地址

reslist =re.findall(pat, req.text)

furl= 'ftp'+reslist[0]returnfurlif __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 inp1 :

j= j + 1

print('正在爬取第%d页,网址是 %s ...'%(j,p1i))

p2=pagelink(p1i)for p2i inp2 :

p3=getdownurl(p2i)if len(p3) ==0 :pass

else:

finalurl=p3

f.write(finalurl+ '\n')print('所有页面地址爬取完毕!')

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

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

ftp

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

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

代码详解:

一、getdownurl

#getdownurl获取页面的视频地址

defgetdownurl(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('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用来产生页面内的视频链接页面

defpagelink(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('',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用来产生不同页数的链接

defchangepage(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 inp1 :

j= j + 1

print('正在爬取第%d页,网址是 %s ...'%(j,p1i))

p2=pagelink(p1i)for p2i inp2 :

p3=getdownurl(p2i)if len(p3) ==0 :pass

else:

finalurl=p3

f.write(finalurl+ '\n')print('所有页面地址爬取完毕!')

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

五、运行及结果

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

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

爬虫python下载电影_python爬虫--爬取某网站电影下载地址相关推荐

  1. python爬虫什么网站都能爬吗_python如何爬取动态网站

    python有许多库可以让我们很方便地编写网络爬虫,爬取某些页面,获得有价值的信息!但许多时候,爬虫取到的页面仅仅是一个静态的页面,即网页 的源代码,就像在浏览器上的"查看网页源代码&quo ...

  2. python壁纸数据抓取_python 多线程爬取壁纸网站的示例

    基本开发环境 ・ Python 3.6 ・ Pycharm 需要导入的库 目标网页分析 网站是静态网站,没有加密,可以直接爬取 整体思路: 1.先在列表页面获取每张壁纸的详情页地址 2.在壁纸详情页面 ...

  3. python第一个项目:爬取一个网站的所有图片

    目的:爬取一个网站的所有图片 调用库:requests库,BeautifulSoup库 程序设计: 1.函数getHTML():用于获取url的html文本 代码如下 def getHTML(url) ...

  4. python爬虫表格数据匹配_python,爬取数据做成表格,解放你的双手

    前言 爬取豆瓣的 top250 电影榜 环境 请自行 安装python 需要的包 BeautifulSoup MySQL-python 开始 创建一个py文件 demo3.py 分析页面结构 ![im ...

  5. Python网络爬虫实践(2):爬取小说网站小说

    Python网络爬虫实践(2) 一.需求分析 爬取某小说网站的一部小说 二.步骤 目标数据 网站 页面 分析数据加载流程 分析目标数据所对应的url 下载数据 清洗,处理数据 数据持久化 重点:分析目 ...

  6. python爬取豆瓣电影信息_Python|简单爬取豆瓣网电影信息

    前言: 在掌握一些基础的爬虫知识后,就可以尝试做一些简单的爬虫来练一练手.今天要做的是利用xpath库来进行简单的数据的爬取.我们爬取的目标是电影的名字.导演和演员的信息.评分和url地址. 准备环境 ...

  7. python怎么爬取电影海报_python脚本爬取豆瓣top250电影超清海报原图

    代码亲自试了一下,速度取决于网速,简单的贴一下代码好了,有什么问题可以留言.思路可以看一下[视频介绍]: https://b23.tv/h508v3 -- coding: utf-8 -- impor ...

  8. 爬虫python名词解释_python爬虫

    Python爬虫是用Python编程语言实现的网络爬虫,主要用于网络数据的抓取和处理,相比于其他语言,Python是一门非常适合开发网络爬虫的编程语言,大量内置包,可以轻松实现网络爬虫功能. Pyth ...

  9. python京东购买_python大规模爬取京东

    python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...

  10. python批量评论_python批量爬取京东手机评论信息及星级

    本科生在读,如有问题欢迎指正 爬取京东评论信息:评论信息是动态加载的,所以在商品详情页不能直接爬取评论. 下面以一款手机为例,详细介绍python批量爬取京东评论. 找到评论区域 image.png ...

最新文章

  1. 用python实现微信消息群发和微信自动回复
  2. SQL注入攻击的种类和防范手段
  3. ICCV 2017 《Chained Cascade Network for Object Detection》论文笔记
  4. 与登录shell相关的文件
  5. 脚本监控网络状态,输出日志并归档(V2)
  6. 程序人生:给所有程序员的27个建议,抽空看看吧!
  7. Java中关于参数的讲解_解读Java参数传递
  8. 系统搜索资源就停止服务器,SQL Server (MSSQLSERVER) 服务启动不了,系统日志显示由于下列服务特定错误而终止: 找不到映像文件中指定的资源名。...
  9. Bing翻译和Google翻译的比较
  10. Android加载超大图片
  11. Blue Coat 最新报告显示 移动端恶意攻击愈演愈烈
  12. 计算机网络技术双机互联,快速实现双机互联的几种方案
  13. 前端请求接口报405错误
  14. 《寒江独钓——windows内核安全编程》vs2019+wdk10开发xp驱动
  15. Leetcode 881:救生艇
  16. php取tet文件内容,PHP中使用PDFlib TET提取PDF中的文本
  17. 2天,我把MySQL索引、事务、分库分表、锁、性能优化撸完了!
  18. error: variable '__this_module' has initializer but incomplete type错误解决
  19. 关于游戏技术发展的一些里程碑的技术
  20. 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案

热门文章

  1. 中国“古诗词”数据库还有可用的API
  2. 考勤机信息同步不到服务器,如何同步考勤机数据?
  3. 安装win10+黑苹果双系统零基础教程
  4. idea 2018汉化包(附使用教程)
  5. 工具学习——介绍几个C++项目可用的UML工具
  6. Qt 中使用librdkafka librdkafka++ 创建消费者
  7. VMware与xshell安装教程
  8. elasticsearch与kibana踩过的坑
  9. android镜子app,Android镜子应用 一面可编程的镜子
  10. Mybatis官方文档地址