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控制台英汉汉英电子词典
Apr 23 Python
python调用新浪微博API项目实践
Jul 28 Python
Python生成不重复随机值的方法
May 11 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python语言生成水仙花数代码示例
Dec 18 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
python开启debug模式的方法
Jun 27 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
python @propert装饰器使用方法原理解析
Dec 25 Python
python logging 日志的级别调整方式
Feb 21 Python
Django Auth用户认证组件实现代码
Oct 13 Python
用python 绘制茎叶图和复合饼图
Feb 26 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
vue 实现全选全不选的示例代码
2018/03/29 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
深入解析Python中的lambda表达式的用法
2015/08/28 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python实现学校管理系统
2018/01/11 Python
Python多层装饰器用法实例分析
2018/02/09 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
python3实现mysql导出excel的方法
2019/07/31 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
车辆安全检查制度
2014/01/12 职场文书
小学班级口号
2014/06/09 职场文书
企业宣传标语
2014/06/09 职场文书
汽车转让协议书范本
2014/12/07 职场文书
工程款申请报告
2015/05/15 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书