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中的自省(反射)详解
Jun 02 Python
python实现简单ftp客户端的方法
Jun 28 Python
Python实现字典依据value排序
Feb 24 Python
Android分包MultiDex策略详解
Oct 30 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
python爬虫之自制英汉字典
Jun 24 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
Python原始套接字编程实例解析
Jan 29 Python
Django实现图片上传功能步骤解析
Apr 22 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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
PHP技术开发技巧分享
2010/03/23 PHP
深入Apache与Nginx的优缺点比较详解
2013/06/17 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
Python入门篇之数字
2014/10/20 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
Python logging模块用法示例
2018/08/28 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
母婴店促销方案
2014/03/05 职场文书
学习雷锋倡议书
2014/04/15 职场文书
家长建议怎么写
2014/05/15 职场文书
医德医风演讲稿
2014/05/20 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
「偶像大师 MILLION LIVE!」七尾百合子手办开订
2022/03/21 日漫