来自 威尼斯国际官方网站 2019-09-19 08:12 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

使用Python编写简单网络爬虫抓取视频下载资源,

前言:因为自个儿也许python世界的一名小学生,还恐怕有多数路要走,所以本文以指标为指导,到达指标就可以,对于那么些自身自个儿都没弄懂的规律,不做去做过多解释,避防误人子弟,我们能够互连网寻觅。

行使Python编写轻便网络爬虫抓取录像下载能源,python爬虫

本身先是次接触爬虫那东西是在当年的七月份,当时写了叁个博客寻找引擎,所用到的爬虫也挺智能的,起码比影片来了这几个站用到的爬虫水平高多了!

回来用Python写爬虫的话题。

Python一向是笔者根本运用的脚本语言,没有之一。Python的语言简明利落,规范库功效强大,日常可以用作计算器,文本编码调换,图片管理,批量下载,批量拍卖文件等。不问可见笔者很欣赏,也越用越上手,这么好用的四个工具,平凡的人自个儿不报告她。。。

因为其长驱直入的字符串管理技艺,以及urllib2,cookielib,re,threading那么些模块的留存,用Python来写爬虫就简直易于反掌了。轻松到何等水平吗。小编立时跟某同学说,小编写电影来了用到的多少个爬虫以及数额整理的一群零零散散的脚本代码行数总共不抢先一千行,写电影来了这几个网址也唯有150来行代码。因为爬虫的代码在别的一台陆14个人的黑苹果上,所以就不列出来,只列一下VPS上网址的代码,tornadoweb框架写的 图片 1

[[email protected] movie_site]$ wc -l *.py template/*
  156 msite.py
   92 template/base.html
   79 template/category.html
   94 template/id.html
   47 template/index.html
   77 template/search.html

下边直接show一下爬虫的编辑撰写流程。以下内容仅供交换学习使用,未有别的意思。

以某湾的风靡摄像下载资源为例,其网站是

因为该网页里有大气广告,只贴一下正文部分内容:

图片 2

对于一个python爬虫,下载那些页面包车型客车源代码,一行代码能够。这里用到urllib2库。

>>> import urllib2
>>> html = urllib2.urlopen('http://某piratebay.se/browse/200').read()
>>> print 'size is', len(html)
size is 52977

自然,也得以用os模块里的system函数调用wget命令来下载网页内容,对于驾驭了wget恐怕curl工具的校友是很方便的。

利用Firebug观看网页结构,能够掌握正文部分html是几个table。每三个能源正是二个tr标签。

图片 3

而对此每种能源,需求领取的消息有:

1、录像分类
2、财富名称
3、财富链接
4、能源大小
5、上传时间

就这么多就够了,借使有要求,还足以追加。

率先提取一段tr标签里的代码来侦察一下。

<tr>
  <td class="vertTh">
   <center>
    <a href="/browse/200" title="此目录中更多">视频</a><br />
    (<a href="/browse/205" title="此目录中更多">电视</a>)
   </center>
  </td>
  <td>
<div class="detName">   <a href="/torrent/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264" class="detLink" title="细节 The Walking Dead Season 3 Episodes 1-3 HDTV-x264">The Walking Dead Season 3 Episodes 1-3 HDTV-x264</a>
</div>
<a href="magnet:?xt=urn:btih:4f63d58e51c1a4a997c6f099b2b529bdbba72741&dn=The+Walking+Dead+Season+3+Episodes+1-3+HDTV-x264&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80" title="Download this torrent using magnet"><img src="//static.某piratebay.se/img/icon-magnet.gif" alt="Magnet link" /></a>   <a href="//torrents.某piratebay.se/7782194/The_Walking_Dead_Season_3_Episodes_1-3_HDTV-x264.7782194.TPB.torrent" title="下载种子"><img src="//static.某piratebay.se/img/dl.gif" class="dl" alt="下载" /></a><img src="//static.某piratebay.se/img/11x11p.png" /><img src="//static.某piratebay.se/img/11x11p.png" />
   <font class="detDesc">已上传 <b>3 分钟前</b>, 大小 2 GiB, 上传者 <a class="detDesc" href="/user/paridha/" title="浏览 paridha">paridha</a></font>
  </td>
  <td align="right">0</td>
  <td align="right">0</td>
 </tr>

上边用正则表明式来提取html代码中的内容。对正则表明式不掌握的同班,能够去 精晓一下。

干什么要用正则表达式而不用别样一些分析HTML或许DOM树的工具是有来头的。小编前边试过用BeautifulSoup3来提取内容,后来意识速度其实是慢死了哟,一分钟能够管理玖拾叁个内容,已经是自己Computer的终端了。。。而换了正则表达式,编写翻译后甩卖内容,速度上从来把它秒杀了!

领到这么多内容,作者的正则表明式要什么样写吗?

基于本身过去的经历,“.*?”或许“.+?”那些事物是很好使的。但是也要专心一些小意思,实际选择的时候就能分晓 图片 4

对于地点的tr标签代码,笔者第一需要让自家的表明式相配到的标识是

<tr>

意味着内容的开首,当然也足以是别的,只要不要失去须求的内容就能够。然后笔者要合作的剧情是上边那么些,获取摄像分类。

(<a href="/browse/205" title="此目录中更加的多">TV</a>)

接着本人要协作营源链接了,

<a href="..." class="detLink" title="...">...</a>

再到别的能源新闻,

font class="detDesc">已上传 <b>3 分钟前</b>, 大小 2 GiB, 上传者

最后相称

</tr>

居功至伟告成!

道理当然是那样的,最终的杰出能够没有须求在正则表明式里表示出来,只要初步地点一定科学了,前边获取音讯的岗位也就不易了。

对正则表明式比较领悟的心上人,恐怕精晓怎么写了。作者Show一下本身写的表明式管理进程,

图片 5

就那样轻便,结果出来了,自己感到挺欢乐的。

自然,那样设计的爬虫是有针对性的,定向爬取某二个站点的开始和结果。也从未任何三个爬虫不会对征集到的链接进行筛选。常常能够选取BFS(宽度优先找寻算法)来爬取贰个网址的有所页面链接。

完整的Python爬虫代码,爬取某湾最新的10页录制能源:

# coding: utf8
import urllib2
import re
import pymongo
db = pymongo.Connection().test
url = 'http://某piratebay.se/browse/200/%d/3'
find_re = re.compile(r'<tr>.+?(.+?">(.+?)</a>.+?class="detLink".+?">(.+?)</a>.+?<a href="(magnet:.+?)" .+?已上传 <b>(.+?)</b>, 大小 (.+?),', re.DOTALL)
# 定向爬去10页最新的视频资源
for i in range(0, 10):
    u = url % (i)
    # 下载数据
    html = urllib2.urlopen(u).read()
    # 找到资源信息
    for x in find_re.findall(html):
        values = dict(
            category = x[0],
            name = x[1],
            magnet = x[2],
            time = x[3],
            size = x[4]
        )
        # 保存到数据库
        db.priate.save(values)
print 'Done!'

以上代码仅供思路浮现,实际运作使用到mongodb数据库,同期大概因为不或然访谈某湾网址而望尘不及获得健康结果。

进而说,电影来了网址用到的爬虫简单写,难的是收获数量后怎么着收拾获取有用音信。比方,怎么着同盟一个影片音信跟三个能源,如何在影视新闻库和摄像链接之间确立关系,那么些都亟待不断尝试各样艺术,最终选出相比较可靠的。

曾有某同学发邮件想花钱也要获取自己的爬虫的源代码。
假诺本身实在给了,笔者的爬虫就几百来行代码,一张Corolla纸,他不会说,坑爹啊!!!……

都说未来是音讯爆炸的时代,所以比的还是何人的数据发现技艺强 图片 6

好吧,那么难点来了读书发掘机(数据)手艺到底哪家强?图片 7图片 8图片 9

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

自己索要贰个python网络爬虫的目录,能够协理做三个

  1. “网络爬虫的目录” 啥意思?

2.有关爬虫,作者已经帮你们写好了学科了。
帖子内容太多,就不再贴了,全都在此处:
如何用Python,C#等语言去落到实处抓取静态网页 模拟登陆网站

内部有全数的,原理,逻辑,示例代码,富含C#和Python的。

(此处不给贴地址,请本人用谷歌(Google)搜标题,就可以找到帖子地址)  

背景:温馨有台Computer要给老爸用,老爷子喜欢看一些大片,但是家里互联网境遇倒霉,就想批量下载一些存到Computer里。但是当前大多的网址都是如此的,

python新手 一段网络爬虫的简单小程序 某些语法以及功能够不太懂 指引

#将b里面包车型地铁因素全体扩张到a里面,保险不另行def union(a, b): #b里面包车型大巴装有因素 for e in b: #万一不在a里面 if e not in a: a.append(e)def crawl_web(seed): # returns index, graph of inlinks #列表 tocrawl = [seed] #列表 crawled = [] #字典 graph = {} # <url>, [list of pages it links to] #字典 index = {} #不为空 while tocrawl: #赋值给page,并剔除最终多个 page = tocrawl.pop() #管教不另行的增进 if page not in crawled: #下边是各样函数的调用 content = get_page(page) add_page_to_index(index, page, content) outlinks = get_all_links(content) graph[page] = outlinks union(tocrawl, outlinks) crawled.append(page) return index, graph  

作者先是次接触爬虫那东西是在二〇一两年的3月份,当时写了二个博客寻觅引擎,所用到...

图片 10

要求四个个地址进去,本领看出下载地址

图片 11

一经自个儿要下载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 furl


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 = 0
        for p1i in p1 :
            j = j + 1
            print('正在爬取第%d页,网址是 %s ...'%(j,p1i))
            p2 = pagelink(p1i)
            for p2i in p2 :
                p3 = getdownurl(p2i)
                if len(p3) == 0 :
                    pass
                else :
                    finalurl = p3
                    f.write(finalurl + 'n')
    print('所有页面地址爬取完毕!')

主干模块**getdownurl函数:**通过requests来收获页面消息,能够感到那几个新闻的text便是页面源代码(差不离任何一款浏览器右键都有翻动网页源代码的选择),再经过re.compile正则表明式相配的方法来协作到网页源代码中的网站部分,能够看下图

图片 12

 

 这一部分怎么提取呢?通过正则表达式相称。怎么写那几个正则表明式呢?这里用到一个轻易易行狠毒的措施:

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

爬虫中平日用到.*?来做非贪婪相配(专业名词请百度),你能够不难以为这些(.*?)就表示你想要爬收取来的事物,那样的东西在每种网页源码中都以夹在<a href="ftp和">ftp之间的。有人恐怕会问,那这一个相称出来的不是网站啊,举个例子上海教室中出来的正是://d:d@dygodj8.com:12311/[摄像天堂www.dy2018.com]请以你的名字呼唤笔者BD中国和英国双字.DVD,前边少了个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

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:使用Python编写简单网络爬虫抓取视频下载资源,

关键词: