吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20069|回复: 36
收起左侧

[Python 转载] Python爬取电影天堂最新电影的下载链接

  [复制链接]
skeep 发表于 2017-7-23 13:03

Python爬取电影天堂最新电影的下载链接


上一篇帖子只能算是python爬去信息的一个小例子,如果不做数据分析的话,单纯的数据采集又有意义,而本篇所用的脚本则是爬去电影天堂最新的电影的下载地址,爬去之后将链接写入txt,如果想要下载可以直接复制到迅雷中,便可以下载电影,这个相对而言还有点实用价值

第一步,分析待爬去的url格式,以及网站的结构

2.png

3.png

4.png

  • 我们再次点击下一页,观察第三页,由此我们推测起最新电影相关的页面是http://www.ygdy.net/html/gndy/dyzz/list_23_n.html,其中n代表是第几页。然后自己往后翻几页,验证一下这个猜测,最后可以确定我们的猜测。

5.png

6.png

  • 按F12,打开监视器,点击Inspector,然后点击右侧的小箭头,可以看到a标签的href属性,就是一个相对链接,只要在前面添加上,相应的域名信息,就可以访问该页面了。

7.png

8.png

  • 之后我们选择刚才分析的标签进入,然后观察url,确实如猜测的一样是:htt://www.ygdy8.net/html/gndy/dyzz/20170225/53307.html页面内容,浏览页面时,可以很容易的找到视频的下载地址。

9.png

10.png

  • 按F12,打开监控工具,选择Inspector,然后点击右侧的小箭头,最后点击我们要爬去的那个下载地址,可以看到a标签的内容就是下载连接。

    11.png

12.png

  • 下面我们理一下思路,首先是观察到电影页面列表,可以通过a标签的href属性找到电影页面的相对链接,在相对连接之前拼接上htt://www.ygdy8.net/ 之后,可以访问这个url的页面。这个页面中的td标签中的a标签的内容,便是我们要下载的链接。

第二步,编写代码


# coding=utf-8
#dytt.py
import sys
import urllib2
import os
import chardet
from bs4 import BeautifulSoup
import time
import MySQLdb
reload(sys)
sys.setdefaultencoding("utf-8")

#从html页面中获取视频下载地址
def get_download_url(broken_html):
    soup=BeautifulSoup(broken_html,'html.parser')
    fixed_html=soup.prettify()
    td=soup.find('td',attrs={'style':'WORD-WRAP: break-word'})
    url_a=td.find('a')
    url_a=url_a.string
    return url_a

#从html页面中获取电影标题
def get_title(broken_html):
    soup=BeautifulSoup(broken_html,'html.parser')
    fixed_html=soup.prettify()
    title=soup.find('h1')
    title=title.string
    return title

#访问url,返回html页面
def url_open(url):
    req=urllib2.Request(url)
    req.add_header('User-Agent','Mozilla/5.0')
    response=urllib2.urlopen(url)
    html=response.read()
    return html

#主要逻辑就是爬取列表页面,从列表页面中找到每个下载页的连接,拼接好之后再访问,获得标题和下载地址
def add_index_url(url,num,file_object):
    for i in range(1,num):
        new_url=url+str(i)+".html"
        print("----------------------当前爬取第"+str(i)+"页---------------------")
        html=url_open(new_url)
        time.sleep(1)
        soup=BeautifulSoup(html,'html.parser')
        fixed_html=soup.prettify()
        a_urls=soup.find_all('a',attrs={'class':'ulink'})
        host="http://www.ygdy8.net"
        for a_url in a_urls:
            a_url=a_url.get('href')
            a_url=host+a_url
            print(a_url)
            html=url_open(a_url)
            #html=unicode(html,'GBK').encode("utf-8")
            html=html.decode('GBK')
            write_title=get_title(html)
            write_url=get_download_url(html)
            file_object.write(write_title+"\n")
            file_object.write(write_url+"\n")

if __name__=='__main__':
    url="http://www.ygdy8.net/html/gndy/dyzz/list_23_"
    filename="down_load_url.txt"
    num=int(raw_input("please input the page num you want to download:"))
    num=num+1
    if os.path.exists(filename):
        file_object=open(filename,'w+')
    else:
        os.mknod(filename)
        file_object=open(filename,'w+')
    add_index_url(url,num,file_object)
    print("----------------------爬取完成--------------------------")
    file_object.close()

第三步,对于主要代码进行解释


  • 首先还是将所需的库导入以及设置编码格式,具体代码如下:

13.png

  • 定义get_download_url函数,该函数用来html页面中获取视频的下载地址,起具体代码如下:

14.png

  • 定义get_title函数,该函数用来从html页面中获取电影的标题

15.png

  • 定义url_open()函数,该函数访问传入的url,返回html页面

16.png

  • 定义add_index_url函数,该函数是爬虫的主体部分,主要是首先爬去列表页面,拼接出具体页面url之后,再访问该URL获取下载地址。

17.png

  • 爬虫的main函数,首先获取用户输入,得到最终需要爬取的页面数。然后判断待写入的文件是否存在,如果存在则直接打开,如果不存在则创建之后打开。然后执行爬取函数,最后关闭文件。

18.png

[md]### 第四步,效果展示



19.png

20.png

21.png

22.png

第五步,补充说明

  • 我使用的是Kali系统,python是2.7版本,使用了beautifulsoup的库,如果使用windows跑的话,请手动安装相应的库。这类教程网上也有,自行查找吧。
  • 对于爬虫有兴趣的小伙伴,可以私信交流,相互探讨。
  • 写过这两个小爬虫之后,后面就要继续学习逆向汇编的知识了,后期也会坚持写总结文章的。

免费评分

参与人数 24吾爱币 +23 热心值 +23 收起 理由
lendteea + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
skynet_2018 + 1 + 1 用心讨论,共获提升!
你压到我头发了 + 1 + 1 我很赞同!支持支持
silvanevil + 1 + 1 谢谢@Thanks!
五五66 + 1 + 1 热心回复!
wulala386 + 1 + 1 我很赞同!
道隐居士 + 1 我很赞同!
豪的er + 1 + 1 用心讨论,共获提升!
小胖啊小胖 + 1 + 1 已答复!
叶含风 + 1 + 1 我很赞同!
我要笑 + 1 + 1 用心讨论,共获提升!
zyswvut + 1 + 1 我很赞同!
大萌黑 + 1 + 1 我很赞同!
Azure_atk + 1 + 1 谢谢@Thanks!
jielun12345 + 1 + 1 我很赞同!
jason1290 + 1 + 1 我很赞同!
书写情书 + 1 + 1 我很赞同!
超二 + 1 + 1 用心讨论,共获提升!
rolban + 1 + 1 支持技术帖
pjie131 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Lililum + 1 + 1 我很赞同!
beatone + 1 + 1 我很赞同!
55555555 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
RuiBox + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小粉B 发表于 2017-7-23 13:34
美丽汤那么火吗???感觉xpath好用
 楼主| skeep 发表于 2017-10-10 14:52
打酱油的店小五 发表于 2017-10-7 10:55
你设置的防止服务器检测到休眠一秒我虽然没试,但是我觉得写个随机数休眠会更好,而且写点ip线程进去更好, ...

这个延迟一秒,我主要是怕我的机子承受不了,貌似电影天堂没有相应的检测,可以快速爬取的,如果遇到检测的话,随机的延迟比固定的是要好些的。多谢提醒,今后可能会用到,谢谢
chen4321 发表于 2017-7-23 13:15 来自手机
RuiBox 发表于 2017-7-23 13:17
感谢分享!很详细,适合新手参考!
山顶的一棵草 发表于 2017-7-23 13:30
C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
{:1_928:}
 楼主| skeep 发表于 2017-7-23 14:22
感谢大家评论,谢谢大家,至于使用beautifulsoup 是因为相对简单吧 很多教程这是使用的这个,所以就使用的它    个人写小爬虫,不用考虑效率问题,所以用啥都可以的
jzpo 发表于 2017-7-23 14:28
python还有这功能 ,以前都是用火车头来抓取网页内容
 楼主| skeep 发表于 2017-7-23 14:32
jzpo 发表于 2017-7-23 14:28
python还有这功能 ,以前都是用火车头来抓取网页内容

主要是使用第三方库对于html页面进行解析 得到想要的url地址
j120932 发表于 2017-7-23 14:43
其实这类案例方法很多 但是此类我自认为是最简单和快捷的一种, 
Lililum 发表于 2017-7-23 15:32
亲爱的楼主 有16左右年的py2.7爬虫教程吗,我只在网上找到了前几年的文字教程学起来有些吃力
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 05:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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