Python爬取电影天堂最新电影的下载链接
##Python爬取电影天堂最新电影的下载链接上一篇帖子只能算是python爬去信息的一个小例子,如果不做数据分析的话,单纯的数据采集又有意义,而本篇所用的脚本则是爬去电影天堂最新的电影的下载地址,爬去之后将链接写入txt,如果想要下载可以直接复制到迅雷中,便可以下载电影,这个相对而言还有点实用价值
### 第一步,分析待爬去的url格式,以及网站的结构
- 打开浏览器,输入地址:http://www.dytt8.net,进入电影天堂的主页。
- 点击最新电影,然后点击下一步,多操作几次,查看url变化
- 我们再次点击下一页,观察第三页,由此我们推测起最新电影相关的页面是http://www.ygdy.net/html/gndy/dyzz/list_23_n.html,其中n代表是第几页。然后自己往后翻几页,验证一下这个猜测,最后可以确定我们的猜测。
- 按F12,打开监视器,点击Inspector,然后点击右侧的小箭头,可以看到a标签的href属性,就是一个相对链接,只要在前面添加上,相应的域名信息,就可以访问该页面了。
- 之后我们选择刚才分析的标签进入,然后观察url,确实如猜测的一样是:htt://www.ygdy8.net/html/gndy/dyzz/20170225/53307.html页面内容,浏览页面时,可以很容易的找到视频的下载地址。
- 按F12,打开监控工具,选择Inspector,然后点击右侧的小箭头,最后点击我们要爬去的那个下载地址,可以看到a标签的内容就是下载连接。
- 下面我们理一下思路,首先是观察到电影页面列表,可以通过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()
```
### 第三步,对于主要代码进行解释
- 首先还是将所需的库导入以及设置编码格式,具体代码如下:
- 定义get_download_url函数,该函数用来html页面中获取视频的下载地址,起具体代码如下:
- 定义get_title函数,该函数用来从html页面中获取电影的标题
- 定义url_open()函数,该函数访问传入的url,返回html页面
- 定义add_index_url函数,该函数是爬虫的主体部分,主要是首先爬去列表页面,拼接出具体页面url之后,再访问该URL获取下载地址。
- 爬虫的main函数,首先获取用户输入,得到最终需要爬取的页面数。然后判断待写入的文件是否存在,如果存在则直接打开,如果不存在则创建之后打开。然后执行爬取函数,最后关闭文件。
### 第四步,效果展示
### 第五步,补充说明
- 我使用的是Kali系统,python是2.7版本,使用了beautifulsoup的库,如果使用windows跑的话,请手动安装相应的库。这类教程网上也有,自行查找吧。
- 对于爬虫有兴趣的小伙伴,可以私信交流,相互探讨。
- 写过这两个小爬虫之后,后面就要继续学习逆向汇编的知识了,后期也会坚持写总结文章的。
美丽汤那么火吗???感觉xpath好用 打酱油的店小五 发表于 2017-10-7 10:55
你设置的防止服务器检测到休眠一秒我虽然没试,但是我觉得写个随机数休眠会更好,而且写点ip线程进去更好, ...
这个延迟一秒,我主要是怕我的机子承受不了,貌似电影天堂没有相应的检测,可以快速爬取的,如果遇到检测的话,随机的延迟比固定的是要好些的。多谢提醒,今后可能会用到,谢谢 Python好强大,看起来又很简单 感谢分享!很详细,适合新手参考! C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
{:1_928:} 感谢大家评论,谢谢大家,至于使用beautifulsoup 是因为相对简单吧 很多教程这是使用的这个,所以就使用的它 个人写小爬虫,不用考虑效率问题,所以用啥都可以的 python还有这功能 ,以前都是用火车头来抓取网页内容 jzpo 发表于 2017-7-23 14:28
python还有这功能 ,以前都是用火车头来抓取网页内容
主要是使用第三方库对于html页面进行解析 得到想要的url地址 其实这类案例方法很多 但是此类我自认为是最简单和快捷的一种, 亲爱的楼主 有16左右年的py2.7爬虫教程吗,我只在网上找到了前几年的文字教程学起来有些吃力