V1.0

功能:从比较知名的几个电影下载网站爬取下载链接,并自动打印出来:

代码:

# -*- coding: utf8 -*-
from bs4 import BeautifulSoup
import requests, lxml
from urllib.parse import quote
import re def get_name():
while 1:
moviename = input('请输入要查找的电影名\n->')
moviename_quote = quote(moviename.encode('gb2312'))
get_url_from_ygdy(moviename_quote)
get_url_from_bttiantang(moviename)
get_url_from_dytt(moviename_quote) def get_url_from_ygdy(moviename):
baseurl = 'http://s.dydytt.net/plus/search.php?kwtype=0&keyword='
url = baseurl + str(moviename)
content = BeautifulSoup(requests.get(url).content.decode('gb2312', 'ignore'), 'lxml')
first_page = content.find_all('td', width="")
movie_infos = content.find_all('td', width="55%")
if movie_infos.__len__() == 0:
print('查无此电影,请检查后重试')
return
else:
print('阳光电影搜索结果:')
if first_page.__len__() == 0:
for movie_info in movie_infos:
get_info(movie_info, moviename)
else:
last_page_url = first_page[1].find('a').get('href') + '"'
pattern = re.compile('PageNo=(.*?)"')
pnt = re.findall(pattern, last_page_url)
for i in range(int(pnt[0])):
print('第', i + 1, '页:')
page_url = url + '&PageNo=' + str(i + 1)
pagecontent = BeautifulSoup(requests.get(page_url).content.decode('gb2312', 'ignore'), 'lxml')
movie_infos = pagecontent.find_all('td', width='55%')
for movie_info in movie_infos:
get_info(movie_info, moviename) def get_info(movie_info, name):
movie_url = movie_info.find('a').get('href')
moviename = movie_info.text
if '游戏' not in name and '游戏' in moviename:
return
else:
print('电影名:', moviename)
url = 'http://www.ygdy8.com' + movie_url
info = BeautifulSoup(requests.get(url).content.decode('gbk', 'ignore'), 'lxml')
download = info.find_all('td', style="WORD-WRAP: break-word")
print('下载链接:')
if download.__len__() == 1:
print(download[0].find('a').string)
else:
for each in range(download.__len__()):
print('链接', each + 1, ':', download[each].find('a').string)
print('\n') def get_url_from_bttiantang(moviename):
baseurl = 'http://www.bttiantang.com/s.php?q=' + str(moviename)
page_content = requests.get(baseurl).content.decode('utf8', 'ignore')
pattern = re.compile('</b>条<b>(.*?)</b>')
pagenum_info = re.findall(pattern, page_content)
page_content = BeautifulSoup(page_content, 'lxml')
content = page_content.find_all('p', class_="tt cl")
if content.__len__() == 0:
print('查无此电影,请检查后重试')
return
else:
print('BT天堂搜索结果:')
if pagenum_info.__len__() == 0:
for each in content:
get_movieinfo(each, moviename)
else:
for i in range(int(pagenum_info[0])):
print('第', i + 1, '页:')
page_url = baseurl + '&PageNo=' + str(i + 1)
page_content = BeautifulSoup(requests.get(page_url).content.decode('utf8', 'ignore'), 'lxml')
content = page_content.find_all('p', class_="tt cl")
for each in content:
get_movieinfo(each, moviename) def get_movieinfo(movie_content, name):
url = 'http://www.bttiantang.com/' + movie_content.find('a').get('href')
moviename = movie_content.text
if '游戏' not in name and '游戏' in moviename:
return
print('电影名:', moviename)
info = BeautifulSoup(requests.get(url).content.decode('utf8', 'ignore'), 'lxml')
links = info.find_all('div', class_='tinfo')
print('下载链接:')
i = 0
for each in links:
i += 1
print('链接' + str(i) + ':')
print('http://www.bttiantang.com' + each.find('a').get('href')) def get_url_from_dytt(moviename):
baseurl = 'http://www.dytt.com/search.asp?searchword=' + str(moviename)
content = requests.get(baseurl).content.decode('gbk', 'ignore')
pattern = re.compile('下一页.*?href.*?page=(.*?)&')
result = re.findall(pattern, content)
content = BeautifulSoup(content, 'lxml')
items = content.find_all('p', class_='s1')
if items.__len__() == 1:
print('查无此电影,请检查后重试')
return
else:
print('电影淘淘搜索结果:')
if result.__len__() == 0:
for i in range(items.__len__() - 1):
get_movieinfo_from_dytt(items[i + 1], moviename)
else:
for i in range(int(result[0])):
print('第', i + 1, '页:')
url = baseurl + '&page=' + str(i + 1)
page_content = BeautifulSoup(requests.get(url).content.decode('gbk', 'ignore'), 'lxml')
items = page_content.find_all('p', class_='s1')
for i in range(items.__len__() - 1):
get_movieinfo_from_dytt(items[i + 1], moviename) def get_movieinfo_from_dytt(item, name):
moviename = item.find('a').text
movieurl = 'http://www.dytt.com' + item.find('a').get('href')
if '游戏' not in name and '游戏' in moviename:
return
print('电影名:', moviename)
pagecontent = requests.get(movieurl).content.decode('gbk', 'ignore')
links = re.findall(re.compile('ed2k:(.*?)\|/'), pagecontent)
i = 0
print('下载链接:')
if links.__len__() != 0:
for link in links:
i += 1
print('链接' + str(i) + ':', 'ed2k://|file|' + link + '|/')
else:
links = re.findall(re.compile('http:(.*?)torrent'), pagecontent)
if links.__len__() != 0:
for link in links:
i += 1
print('链接' + str(i) + ':', 'http:' + link + 'torrent')
else:
links = re.findall(re.compile('ftp:(.*?)mkv'), pagecontent)
for link in links:
i += 1
print('链接' + str(i) + ':', 'ftp:' + link + 'mkv') if __name__ == '__main__':
get_name()

运行结果:

python 电影下载链接爬虫的更多相关文章

  1. Java爬虫爬取网站电影下载链接

    之前有看过一段时间爬虫,了解了爬虫的原理,以及一些实现的方法,本项目完成于半年前,一直放在那里,现在和大家分享出来. 网络爬虫简单的原理就是把程序想象成为一个小虫子,一旦进去了一个大门,这个小虫子就像 ...

  2. 使用htmlparse爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  3. 使用htmlparser爬虫技术爬取电影网页的全部下载链接

    昨天,我们利用webcollector爬虫技术爬取了网易云音乐17万多首歌曲,而且还包括付费的在内,如果时间允许的话,可以获取更多的音乐下来,当然,也有小伙伴留言说这样会降低国人的知识产权保护意识,诚 ...

  4. 一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接

    [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...

  5. Python 爬虫的工具列表 附Github代码下载链接

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  6. 【Python项目】简单爬虫批量获取资源网站的下载链接

    简单爬虫批量获取资源网站的下载链接 项目链接:https://github.com/RealIvyWong/GotDownloadURL 1 由来 自己在收集剧集资源的时候,这些网站的下载链接还要手动 ...

  7. Python爬虫个人记录(二) 获取fishc 课件下载链接

    参考: Python爬虫个人记录(一)豆瓣250 (2017.9.6更新,通过cookie模拟登陆方法,已成功实现下载文件功能!!) 一.目的分析 获取http://bbs.fishc.com/for ...

  8. Python网络爬虫笔记(二):链接爬虫和下载限速

    (一)代码1(link_crawler()和get_links()实现链接爬虫) import urllib.request as ure import re import urllib.parse ...

  9. Python 爬虫 Vimeo视频下载链接

    python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...

随机推荐

  1. jquery相对选择器,又叫context选择器,上下文选择器;find()与children()区别

    jquery相对选择器有两个参数,jQuery函数的第二个参数可以指定DOM元素的搜索范围(即以第二个参数指定的内容为容器查找指定元素). 第二个参数的不同的类型,对应的用法如下表所示. 类型 用法 ...

  2. 让PHP 5.3支持MSSQL连接

    最近在Windows Server 2008配置了PHP环境,想要连接SQL Server 2008,但是悲催的发现,从5.3开始,PHP自带的dll不再支持2000以后的MS SQL Server了 ...

  3. [51NOD1405] 树的距离之和(树DP)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 (1)我们给树规定一个根.假设所有节点编号是0-(n-1 ...

  4. Makefile文件简单整理

    .PHONY:clean main:hello.o gcc -o main hello.c hello.o:hello.c gcc -c hello.c clean: rm -f hello.o ma ...

  5. Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)

    学习内容: 1.不依赖外部Tomcat,自己启动方式部署 2.Maven打war包,远程部署到centOS 3.Maven热部署(不关闭Tomcat部署应用)   做maven开发前提: 1.编码UT ...

  6. 获取DIV与浏览器顶部相聚一定位置之后移动DIV

    获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 方法一: $(function() {  ...

  7. Codeforces Round #250 (Div. 2)A(英语学习)

    链接:http://codeforces.com/contest/437/problem/A A. The Child and Homework time limit per test 1 secon ...

  8. POJ 3286 How many 0's?(几多0?)

    POJ 3286 How many 0's?(几多0?) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A Benedi ...

  9. POJ 1142 Smith Numbers(史密斯数)

    Description 题目描述 While skimming his phone directory in 1982, Albert Wilansky, a mathematician of Leh ...

  10. observer观察者模式

    观察者模式(有时又被称为发布-订阅Subscribe>模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,让 ...