python3爬取torrent种子链接实例


Posted in Python onJanuary 16, 2020

本文环境是python3,采用的是urllib,BeautifulSoup搭建。

说下思路,这个项目分为管理器,url管理器,下载器,解析器,html文件生产器。各司其职,在管理器进行调度。最后将解析到的种子连接生产html文件显示。当然也可以保存在文件。最后效果如图。

首先在管理器SpiderMain()这个类的构造方法里初始化下载器,解析器,html生产器。代码如下。

def__init__(self):

  self.urls = url_manager.UrlManager()
  self.downloader = html_downloader.HtmlDownloader()
  self.parser = html_parser.HtmlParser()
  self.outputer = html_outputer.HtmlOutputer()

然后在主方法里写入主连接并开始下载解析和输出。

if __name__ == '__main__':
  url = "http://www.btany.com/search/桃谷绘里香-first-asc-1"
  # 解决中文搜索问题 对于:?=不进行转义
  root_url = quote(url,safe='/:?=')
  obj_spider = SpiderMain()
  obj_spider.parser(root_url)

用下载器进行下载,解析器解析下载好的网页,最后输出。管理器的框架逻辑就搭建完毕

def parser(self, root_url):  
  html = self.downloader.download(root_url)  
  datas = self.parser.parserTwo(html)  
  self.outputer.output_html3(datas)

downloader下载器代码如下:

def download(self, chaper_url):

  if chaper_url is None:
    return None
  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
  req = urllib.request.Request(url=chaper_url, headers=headers)
  response = urllib.request.urlopen(req)
  if response.getcode() != 200:
    return None

  return response.read()

headers是模仿浏览器的请求头。不然下载不到html文件。

解析器代码如下:

# 解析种子文件
def parserTwo(self,html):
  if html is None:
    return
  soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')
  res_datas = self._get_data(soup)
  return res_datas

# 将种子文件的标题,磁力链接和迅雷链接进行封装
def _get_data(self,soup):
  res_datas = []
  all_data = soup.findAll('a',href=re.compile(r"/detail"))
  all_data2 = soup.findAll('a', href=re.compile(r"magnet"))
  all_data3 = soup.findAll('a',href=re.compile(r"thunder"))
  for i in range(len(all_data)):
    res_data = {}
    res_data['title'] = all_data[i].get_text()
    res_data['cl'] = all_data2[i].get('href')
    res_data['xl'] = all_data3[i].get('href')
    res_datas.append(res_data)
  return res_datas

通过分析爬下来的html文件,种子链接在a标签下。然后提取magnet和thunder下的链接。

最后输出器输出html文件,代码如下:

def __init__(self):
  self.datas = []

def collect_data(self, data):
  if data is None:
    return
  self.datas.append(data)
#输出表单 
def output_html3(self,datas):
  fout = open('output.html', 'w', encoding="utf-8")

  fout.write("<html>")
  fout.write("<head><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"></head>")
  fout.write("<body>")
  fout.write("<table border = 1>")

  for data in datas:
    fout.write("<tr>")
    fout.write("<td>%s</td>" % data['title'])
    fout.write("<td>%s</td>" % data['cl'])
    fout.write("<td>%s</td>" % data['xl'])
    fout.write("</tr>")

  fout.write("</table>")
  fout.write("</body>")
  fout.write("</html>")
  fout.close()

python3爬取torrent种子链接实例

项目就结束了。源代码已上传,链接https://github.com/Ahuanghaifeng/python3-torrent,觉得有用请在github上给个star,您的鼓励将是作者创作的动力。

以上这篇python3爬取torrent种子链接实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3 能振兴 Python的原因分析
Nov 28 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
Django REST framework视图的用法
Jan 16 Python
python使用装饰器作日志处理的方法
Jul 11 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
Python双链表原理与实现方法详解
Feb 22 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
k-means 聚类算法与Python实现代码
Jun 01 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
Python 实现自动获取种子磁力链接方式
Jan 16 #Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 #Python
Python简单实现区域生长方式
Jan 16 #Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 #Python
Pycharm中Python环境配置常见问题解析
Jan 16 #Python
Python Numpy库常见用法入门教程
Jan 16 #Python
Python使用Pandas库常见操作详解
Jan 16 #Python
You might like
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP中for循环语句的几种变型
2006/11/26 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
mongodb和php的用法详解
2019/03/25 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
Google Maps API地图应用示例分享
2014/10/23 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
angular4 如何在全局设置路由跳转动画的方法
2017/08/30 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
python内存管理分析
2015/04/08 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python基于openpyxl生成excel文件
2020/12/23 Python
python Pexpect模块的使用
2020/12/25 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
中文专业学生自我评价范文
2014/02/06 职场文书
助理政工师申报材料
2014/06/03 职场文书
团干部培训方案
2014/06/03 职场文书
大学生助学金感谢信
2015/01/21 职场文书