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和pyqt实现360的CLable控件
Feb 21 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
使用Python实现在Windows下安装Django
Oct 17 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
python的pygal模块绘制反正切函数图像方法
Jul 16 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
python二元表达式用法
Dec 04 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
python爬虫基础知识点整理
Jun 02 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
php 中英文语言转换类
2011/09/07 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
jQuery获取DOM节点实例分析(2种方式)
2015/12/15 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python实现简单登录验证
2016/04/13 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
python分布式计算dispy的使用详解
2019/12/22 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
vue+django实现下载文件的示例
2021/03/24 Vue.js
销售岗位职责范本
2014/06/12 职场文书
门面房租房协议书
2014/12/01 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
react如何快速设置文件路径别名
2021/04/28 Javascript
浅析MySQL如何实现事务隔离
2021/06/26 MySQL