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中的内存泄漏
Apr 23 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
Python for循环中的陷阱详解
Jul 13 Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
详解python读取image
Apr 03 Python
python实现翻转棋游戏(othello)
Jul 29 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
pandas中read_csv、rolling、expanding用法详解
Apr 21 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 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
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
php经典趣味算法实例代码
2020/01/21 PHP
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
详解Axios统一错误处理与后置
2018/09/26 Javascript
Vue项目中使用WebUploader实现文件上传的方法
2019/07/21 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
Vuex的API文档说明详解
2020/02/05 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python SQLite3数据库操作类分享
2014/06/10 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
大学生毕业的自我评价分享
2014/01/02 职场文书
房屋公证委托书
2014/04/03 职场文书
代理人委托书
2014/09/16 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL