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调用shell的方法
Nov 20 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
Python星号*与**用法分析
Feb 02 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 Python
int在python中的含义以及用法
Jun 27 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
python re模块和正则表达式
Mar 24 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求小于1000的所有水仙花数的代码
2012/01/10 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
javascript实现查找数组中最大值方法汇总
2016/02/13 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
写给保洁员表扬信
2014/01/08 职场文书
销售提升方案
2014/06/07 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
python函数的两种嵌套方法使用
2022/04/02 Python