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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python中操作文件之write()方法的使用教程
May 25 Python
Python实现文件按照日期命名的方法
Jul 09 Python
python 对类的成员函数开启线程的方法
Jan 22 Python
在Python中表示一个对象的方法
Jun 25 Python
Python常用数据类型之间的转换总结
Sep 06 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
django 多数据库及分库实现方式
Apr 01 Python
Python如何实现邮件功能
May 27 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 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抓取页面的几种方法详解
2013/06/17 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php除数取整示例
2014/04/24 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
PHP 99乘法表的几种实现代码
2020/10/13 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
2018/02/22 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
Python 多进程和数据传递的理解
2017/10/09 Python
numpy.array 操作使用简单总结
2019/11/08 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
python装饰器代码深入讲解
2021/03/01 Python
客服文员岗位职责
2013/11/29 职场文书
环保专业大学生职业规划设计
2014/01/10 职场文书
电视节目策划方案
2014/05/16 职场文书
租房协议书
2014/09/12 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
健康证明
2015/06/19 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
JVM之方法返回地址详解
2022/02/28 Java/Android