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 相关文章推荐
Python实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python标准库shutil用法实例详解
Aug 13 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
python推导式的使用方法实例
Feb 28 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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
初探PHP5
2006/10/09 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
PHP session会话的安全性分析
2011/09/08 PHP
php实现多城市切换特效
2015/08/09 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
Javascript实现鼠标框选操作  不是点击选取
2016/04/14 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
Python中针对函数处理的特殊方法
2014/03/06 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
Python中进程和线程的区别详解
2017/10/29 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server