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 2.7.x 和 3.x 版本的重要区别小结
Nov 28 Python
Python实现比较两个列表(list)范围
Jun 12 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
基于DataFrame改变列类型的方法
Jul 25 Python
python 实现selenium断言和验证的方法
Feb 13 Python
pandas.cut具体使用总结
Jun 24 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Python计算信息熵实例
Jun 18 Python
python 利用zmail库发送邮件
Sep 11 Python
Python 操作 MySQL数据库
Sep 18 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 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作的文本留言本的例子(三)
2006/10/09 PHP
可以在线执行PHP代码包装修正版
2008/03/15 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
jquery form表单序列化为对象的示例代码
2014/03/05 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
2017/05/12 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
python迭代器的使用方法实例
2013/11/21 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
python实现磁盘日志清理的示例
2020/11/05 Python
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
介绍一下常见的木马种类
2014/11/15 面试题
执行力心得体会
2013/12/31 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
档案室主任岗位职责
2014/02/12 职场文书
个人实习生的自我评价
2014/02/16 职场文书
广告设计应届生求职信
2014/03/01 职场文书
经典团队口号
2014/06/06 职场文书
法人授权委托书样本
2014/09/19 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
简易离婚协议书范本
2014/10/24 职场文书
婚礼新人答谢词
2015/01/04 职场文书
同学聚会感言一句话
2015/07/30 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏