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

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

标签(空格分隔): 爬虫 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 requests
from bs4 import BeautifulSoup
import re

def 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:
            continue

def 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:
            continue

def 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()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值