Python网络爬虫实战:磁力种子搜索站爬虫(二) BT种子

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wenxuhonghe/article/details/95638816

由于平时看个电影,各种找资源太费劲了,而且好多磁力资源网站的广告那叫一个多啊,到处都是坑。一个不小心就跳转到什么 澳门金冠赌场,什么 性感荷官在线发牌的网站,整的搜个资源跟玩扫雷一下,真实令人头大。

所以我找了一些比较靠谱的磁力种子网站《【资源搜集】最新的磁力种子搜索网站汇总(亲测可用)》,用爬虫技术调用他们的搜索接口,直接提取他们的搜索结果,省的花时间花精力跟它们网页上的各种广告各种链接斗智斗勇。

我找了 17 个磁力种子网站,算下来应该是 17 篇爬虫教程,这个应该算是磁力种子爬虫系列吧,哈!如果有对这个系列爬虫感兴趣的朋友,请关注我的博客哦。


今天要爬的网站是 BT种子( https://btzzii.me/ )。


 

一、目标网站分析

按照惯例,先分析一波网页,伸手党如果懒得看,可以跳过直接去后面看代码实现部分。

有了上一篇《Python网络爬虫实战:磁力种子搜索站爬虫(一) BT蚂蚁》的分析,这个网站的爬取就要容易一些了,因为两个网站的页面结构,包含的数据,爬取的方式等,基本一致。

所以我们这个分析的部分比较简略的讲一下,详细的分析过程可以参考 BT蚂蚁爬虫 教程文章。

1. 页面中包含哪些数据以及如何获取

通过上面的截图我们可以得知,搜索结果列表页面中,我们可以获取到磁力种子的以下五个信息:

  • 电影名称
  • 时间,包括创建时间和最近下载时间
  • 下载热度
  • 文件大小
  • 下载链接,包括磁力链接和迅雷链接

通过 F12 开发者工具,我们可以很快的定位到这些数据在网页中的存放位置,方便后续提取。

 由截图可知,

每条磁力种子记录存放在一个 <div class="cili-item">  下。其中,

电影名称存放在 <div class="item-title"> / <h3> / <a> 中,

创建时间存放在 <div class="item-bar"> / <span>(第2个 span ) / <b> 中,

文件大小存放在 <div class="item-bar"> / <span>(第3个 span ) / <b> 中,

下载热度存放在 <div class="item-bar"> / <span>(第4个 span ) / <b> 中,

磁力链接存放在 <div class="item-bar"> / <a>(第1个 a )中。

2. URL 构造规则分析

搜索结果每页仅展示 10 条,要想获取所有的磁力种子,就必须搞清楚,它是怎么翻页的。

跟 BT蚂蚁 一样,BT种子 网站也是通过 URL 来实现翻页,以及搜索结果排序的。

URL 示例: https://btzzii.me/bt/战狼2/rela-1.html

构成规则 :https://btzzii.me/bt/<搜索关键字>/<排序方式>-<页码>.html

 其中,搜索关键字,指的是你要搜索的电影名,如战狼2。

排序方式有四种,热门下载(默认,default),最新收录(time),文件大小(size),相关下载(rela)。

页码从1开始计数,直到最大页码。

二、编码实现环节

依我的习惯,我将这个爬虫根据功能模块,拆分为了 5 个函数。

  • fetchURL 函数,用来发起网络请求,
  • getPageNum 函数,用来获取搜索结果的总页码,从而限定翻页参数的范围
  • parseHTML 函数,用来解析网页,提取网页中的关键数据
  • saveData 函数,用来将提取出的数据存储至本地文件中
  • Main 函数,用来作为爬虫调度器。

相比于前面的 BT蚂蚁爬虫,这个爬虫主要改动的地方在于 getPageNum 函数,parseHTML 函数,和 main 函数。

毕竟不同的网站页面的具体解析方法会有些许的差异。

而其他部分,发起网络请求,保存数据的操作都是一样的,可以通用。

def parseHTML(html):
    '''
    功能:解析网页,提取需要的数据
    参数:目标网页的 html 源码
    返回:需要提取的数据
    '''
    #提取的数据有 title,date,hot,size,link
    
    bsobj = bs4.BeautifulSoup(html,"html.parser")
    movieList = bsobj.find_all("div", attrs = {"class" :"cili-item"})
    
    movieInfo = []

    for item in movieList:      
        movieItem = []
        
        title = item.find("div", attrs = {"class": "item-title"}).h3.a.text
        bar = item.find("div", attrs = {"class": "item-bar"}).find_all("span")
        date = bar[1].b.text
        hot = bar[3].b.text
        size = bar[2].b.text        
        link = item.find("div", attrs = {"class": "item-bar"}).find_all("a")[0]["href"]
        
        movieItem.append(title)
        movieItem.append(date)
        movieItem.append(hot)
        movieItem.append(size)
        movieItem.append(link)
        movieInfo.append(movieItem)

    return movieInfo

获取总页码数这里我多说一句,因为 BT蚂蚁 网站是有 “最后一页” 这个选项的,所以我们可以直接从页面中获取它的最后一页链接,然后提取总页码数。

而 BT种子 网站没有尾页这个按钮,只有上一页和下一页,也就是说,我们没有办法直接得知最后一页是第几页。 

不过机智的我很快找到了解决方法,在搜索结果顶部,有这么一条数据,显示一共搜索到多少条磁力链接,而我们之前有分析知道,每一页展示 10 条结果,所以。。。直接总条数除以10,向上取整即可得到总页数。

def getPageNum(html):
    '''
    功能:获取总页码数
    '''    
    bsobj = bs4.BeautifulSoup(html,"html.parser")
    pageText = bsobj.find("div", attrs = {"id" : "wall"}).find_all("div")[0].span.text
    itemNum = int(pageText.split(" ")[1])
    page = int(itemNum / 10) + 1
    return page

主函数这里控制整个爬虫的进程,由用户输入要搜索的电影名,然后根据规则构造初始 URL,获取搜索结果的总页数,然后循环爬取每一页的数据,将数据保存至本地 csv 文件中,直到爬取完成。

if __name__ == '__main__':
    
    name = input("请输入要查找的电影名或番号:")
    url = 'https://btzzii.me/bt/'+ name + '/default-1.html'
    html = fetchURL(url)
    page = getPageNum(html)
    print(page)
    
    path = "Data/BT种子/"
    filename = name + ".csv"
    
    for index in range(0,page):
        index += 1
        print("-----------第" + str(index) + "页----------")
        url = 'https://btzzii.me/bt/'+ name + '/default-' + str(index) + '.html'
        html = fetchURL(url)
        data = parseHTML(html)
        save_data(data,path,filename)

还是那句话,因为两个爬虫实在是太像了,唯一有点区别的地方也就是获取总页数的那儿。

所以我这儿没有赘述分析过程,也没有贴全部完整的代码(完整代码在 BT蚂蚁 那篇博客中已经有了,有需要的话自行把代码整合一下用),如果都这样了你还不会。。。。。。那在留言区评论一下,我手把手教你。

爬取结果展示

 三、交流答疑区


2019年8月9日更新

bt 种子的这个域名 https://btzzii.me/ 好像变了,网站上不去了,导致爬虫也没有办法直接使用了。

新的域名我暂时还没有找到,如果读者朋友们,有知道 BT种子的最新网址的话,请评论区里留言,特别感谢。

上面的爬虫程序也并非完全不能用了,只需要在知道了 BT种子最新网址之后,替换代码中的网址 https://btzzii.me/ 即可。

如果文章中有哪里没有讲明白,或者讲解有误的地方,欢迎在评论区批评指正,或者扫描下面的二维码,加我微信,大家一起学习交流,共同进步。

猜你喜欢

转载自blog.csdn.net/wenxuhonghe/article/details/95638816