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中类、模块、错误与异常、文件的简易教程
Nov 20 Python
python实现批量按比例缩放图片效果
Mar 30 Python
python numpy格式化打印的实例
May 14 Python
python中正则表达式 re.findall 用法
Oct 23 Python
django2.0扩展用户字段示例
Feb 13 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
python实现会员管理系统
Mar 18 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
解析isset与is_null的区别
2013/08/09 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
Python 3中的yield from语法详解
2017/01/18 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
浅析Python 多行匹配模式
2020/07/24 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
HTML5 Web 存储详解
2016/09/16 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
社会实践心得体会
2014/01/03 职场文书
运动会广播稿300字
2014/01/10 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书