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轻松实现代码编码格式转换
Mar 26 Python
Python实现的最近最少使用算法
Jul 10 Python
python3中str(字符串)的使用教程
Mar 23 Python
python实现图片转字符小工具
Apr 30 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python:type、object、class与内置类型实例
Dec 25 Python
Python 去除字符串中指定字符串
Mar 05 Python
如何理解Python中的变量
Jun 01 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
Python极值整数的边界探讨分析
Sep 15 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 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实现Ftp用户的在线管理
2012/02/16 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
2020/03/07 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
使用python开发vim插件及心得分享
2014/11/04 Python
Python中http请求方法库汇总
2016/01/06 Python
python3 shelve模块的详解
2017/07/08 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python 调用钉钉机器人的方法
2019/02/20 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
智能钱包:Ekster
2019/11/21 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
幼儿园小班评语
2014/04/18 职场文书
工人先锋号申报材料
2014/12/29 职场文书
班主任开场白
2015/06/01 职场文书
运动会通讯稿100字
2015/07/20 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers