项目三:爬取视频磁力链接

来源:互联网 发布:zbtc 数字图像 算法 编辑:程序博客网 时间:2024/04/30 12:24

项目三:爬取视频磁力链接

标签(空格分隔): 爬虫 BeautifulSoup

—具体技术实现原理类似项目二

1. 项目任务分析

类似上一个小项目中爬取图片的技术原理,本次小项目尝试对相同网站上的可供下载视频的磁力链接进行爬取

2. 项目功能分析

2.1 爬取视频列表

视频列表所在网页

网页上视频信息如上图所示,所以要先定义一个模块来获取如图所示的视频列表信息,查看网页源代码如下图所示
视频列表所在网页源代码
显然每一个视频名称保存在a.string即标签的非属性字符串里,而视频所在链接保存在a.attrs['href']里,那么可以很容易得到视频名称和视频所在链接的信息,将这些信息保存在一个字典里,共后续爬取使用

2.2 爬取视频磁力链

根据上一步得到的视频链接,跳转至相应页面的结果如下图所示
每个视频页面上的磁力链
可以看到每个视频页面上有磁力链,所以可以查看源代码来找到磁力链的具体获取方式,查看源代码如下图所示
视频磁力链对应的源代码
通过content = soup.find('div', attrs={'class':'content'})语句来找到包含有磁力链接的标签,因为该磁力链接没有保存在某个字标签的非属性字符串里,也不是某个子标签的某种属性,所以之前的方法不适用。那么这里可以使用tempList = content.text.split('\n')得到content标签里面包含的所有字符串并保存在列表中,再利用正则表达式对符合一定规则的列表各个元素进行匹配,得到正确的磁力链

2.3 文件存取

在得到视频的名称与磁力链并保存在字典里之后,需要将字典内容保存在文本文件中,本次小项目就事先建立好一个文本文件,直接将字典里的内容写入该文件即可。这个模块中的重点是对字典的遍历

3. 完整代码

import requestsfrom bs4 import BeautifulSoupimport redef getHTMLText(url):    try:        r = requests.get(url)        r.raise_for_status()        r.encoding = r.apparent_encoding        return r.text    except:        return ""def getMagnetList(magnetURL, magnetsList):    html = getHTMLText(magnetURL)    soup = BeautifulSoup(html, 'html.parser')    # 抽取包含磁力文件名称和链接的标签,保存在列表里    title = soup.find_all('a', attrs={'class':'title'})    for t in title:        try:            link = 'http://www.99rblc.com' + t.attrs['href']            magnetsList.append(link)        except:            continuedef getMagnetInfo(magnetsDict, magnetsList):    for magnet in magnetsList:        html = getHTMLText(magnet)        try:            if html == "":                continue            soup = BeautifulSoup(html, 'html.parser')            # 磁力文件名称            title = soup.find('div', attrs={'class':'title'})            magnetName = title.text.split('\n')[1]            print( "已爬到资源 :  " + magnetName + '\n' )            print( "继续爬取该资源的磁力链..."  + '\n' )            # 磁力链接内容            content = soup.find('div', attrs={'class':'content'})            tempList = content.text.split('\n')            for item in tempList:                if re.findall(r"^magnet[A-Za-z0-9:?= ]+$", item) == []:                    continue                magnetContent = re.findall(r"^magnet[A-Za-z0-9:?= ]+$", item)[0]            print( "爬到磁力链为 :  " + magnetContent + '\n\n\n' )            magnetsDict[magnetName] = magnetContent        except:            continuedef saveMagnet(magnetsDict):    path = 'D://MagnetInfo//magnet.txt'    f = open(path, 'a')    for key in magnetsDict:        f.write( "电影名称 :  " + key + '\n' )        f.write( "磁力链接 :  " + magnetsDict[key] + '\n\n\n' )    f.close()def main():    depth = 5    for i in range(depth):        print( "开始爬取第" + str(i+1) + "页" + '\n' )        magnetURL = 'http://www.99rblc.com/ozgq/38/' + str(i+1) + '.htm'        magnetsList = []        magnetsDict = {}        getMagnetList(magnetURL, magnetsList)        getMagnetInfo(magnetsDict, magnetsList)        saveMagnet(magnetsDict)main()