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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
基于hashlib模块--加密(详解)
Jun 21 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
python next()和iter()函数原理解析
Feb 07 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 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文件上传类
2015/10/29 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
delegate与普通函数的区别
2014/01/22 面试题
开朗女孩的自我评价
2014/02/10 职场文书
农村产权制度改革实施方案
2014/03/21 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
服务标语大全
2014/06/18 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
学生保证书
2015/01/16 职场文书
办公室规章制度范本
2015/08/04 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
SpringBoot生成License的实现示例
2021/06/16 Java/Android
Android studio 简单计算器的编写
2022/05/20 Java/Android