Fork me on GitHub

cutout 中文文档

快速导航

下载源码 托管地址 阅读须知 关于 Fork me on Github
cutout 数据采集
cutout() 采集数据 cutouts() 多线程并发采集 download() 下载文件 downloads() 多线程并发下载 get_html() 获取网页html url_save() 下载url文件 url_size() 获取url文件大小 remove_html_tags() 去除html标签 ungzip() gzip解压
mysql 数据库支持
setconf() 配置 connect() 连接数据库 disconnect() 断开连接 query() 执行SQL语句
cache 缓存
MemCache 内存缓存 FileCache 文件缓存
util 工具箱
urlencode() url编码 urldecode() url解码 time2sec() 时间字符串转换为秒 sec2time() 秒转换为时间 fillside() 字符串补足 rangable() 限定数值范围 parse_argv() 解析参数
common 通用组件
ProgressBar 进度条 CommandDirect 命令行函数映射
http 外部接口
respond() 注册外部接口 start() 启动接口服务

阅读须知

cutout 是一个强大的数据抓取/采集与处理工具箱。

example.py 文件中包含更多示例用法和测试用例。

cutout 数据采集

使用cutout函数,可以方便的从网页上抓取需要的数据,并对其进行进一步的处理。

from cutout import cutout
#参数说明
cutout(
	url=None, #要采集的url地址
	data=None, #待处理的文本,如果传了url,则忽略此参数
	start=0,  #截取开始位置或字符串
	end=0, #截取结束位置或字符,如果文本里含有多个start或end字符串,以第一个的位置为准
	pure=True,  #是否不包含 start 和 end 字符
	match=False, #正则匹配(如果定义此项则start,end,pure将被忽略
	rid=False, # “不包含/排除”的字符
	split=None, #将截取的结果按字符串分割为数组
	encoding='utf-8', #文档编码
	timeout=None, #超时错误(url连接超时,结果返回None,避免长时间无响应)
	dealwith=None #对“剪”的结果进行再次处理。
)

函数使用示例:

## cutout抓取用法示例

from cutout import cutout

datastr = '''
<html>
  <head>
    <title>html网页标题</title>
  </head>
  <body>
     <ul id="img">
     	<li> <p>pic1</p> <img src="/img/pic1.jpg" />  </li>
     	<li> <p>pic2</p> <img src="/img/pic2.jpg" />  </li>
     	<li> <p>pic3</p> <img src="/img/pic3.jpg" />  </li>
     </ul>
  </body>
</html>
'''

# 获取网页title

title = cutout(
  data=datastr,
  start="<title>",
  end="</title>"
)
print(title) #  html网页标题

# 获取图片地址

href = cutout(
  data=datastr,
  start="<ul id=\"img\">",
  end="</ul>",
  split="<li>", #分割
  dealwith=({
    "start":"<p>", #获取名称
    "end":"</p>" 
  },{
    "start":'<img src="', #获取网址
    "rid":'"',
    "end":'"'
  })

)

print(href) #  [['', None], ['pic1', '/img/pic1.jpg'], ['pic2', '/img/pic2.jpg'], ['pic3', '/img/pic3.jpg']]
# 获取的结果数组第一个为  ['', None] 因为以 <li> 分割时 第一段字符为空

## 参数 dealwith 可以为字典 字段数组 或 字典元组,支持属性值: start rid end pure match split ... 将被作为参数 递归调用 cutout

cutouts 并发采集

cutoutscutout的多线程并发版本。

from cutout import cutouts
#参数说明
cutouts(
	# url 不使用url参数名
	urls=None, #要采集的url地址列表(可遍历字符串列表或元组)
	threadback=None, 线程采集完成的回调,参数为采集结果
	... # 其它参数与 cutout 相同
)

cutouts将开启多个线程,并等待所有子线程执行完毕后,返回结果数组。

download 文件下载

使用cutout函数抓取页面静态文件链接后,使用download下载静态文件。参数 showBar 可传自定义 ProgressBar 对象

from cutout import download

#参数说明
download(
	url, #文件url地址
	file=None, #下载到本地的文件命名(默认与url文件名一致)
	path=None, #下载路径(默认为脚本当前路径)
	showBar=False, #是否显示 ProgressBar 进度条(True或者进度条对象)
	headers={}, #下载时的http请求头部信息
	pretend=True, #是否伪装成浏览器
	referer=None #来源链接
)

函数使用示例:

## download 文件下载示例

from cutout import download

fileurl = 'http://cutout.jojoin.com/document.zh.htm'

#自定义下载进度条
bar = ProgressBar(piece_total=1);
bar.face(
	sh_piece_division=1024, #piece 除法
	sh_piece_unit='KB' #piece 单位
)

#下载文件
info = download(fileurl,showBar=bar)

# 返回值 info:
# (totalsize,time,param)
# totalsize:总大小
# time:时间
# param :传入的参数

# print输出:
# [==================>        ]  75.00%  20.00%/s  4322.41KB/s  8644.81KB/8644.81KB  00:00:02



downloads 多线程并发下载

downloadsdownload的多线程并发版本。

from cutout import downloads
#参数说明
downloads(
	# url 不使用url参数名
	urls, #要采集的url地址列表(可遍历字符串列表或元组)
	files=None, #保存文件名数组
	paths=None, #下载路径数组
	threadback=None, 线程采集完成的回调,参数为下载结果信息
	... # 其它参数与 cutout 相同
)

cutouts将开启多个线程,并等待所有子线程执行完毕后,返回结果数组。

get_html 获取网页html

from cutout import get_html
#参数说明
get_html(
	url, #要获取的url地址
	encoding=None, #对获取的文本进行编码
	timeout=None, #超时异常触发事件
)

get_html更加底层,如果仅仅是为了获取html网页内容,推荐使用cutout

url_save 下载url文件

from cutout import url_save
#参数说明
url_save(
	url, #要获取的文件url地址
	file=None, #保存的文件名
	path=None, #下载路径,默认为当前执行路径
	headers={}, #下载的请求头,用于伪装等
	arrive=None #数据到达回调
)

url_save更加底层,如果仅仅是为了下载文件,推荐使用download

remove_html_tags 去除html标签

from cutout import remove_html_tags
#参数说明
 remove_html_tags(
	htmlstr, #html文本
)

url_size 获取url文件大小

from cutout import url_size
#参数说明
url_size(
	url, #要获取大小的文件url地址
)

ungzip gzip解压

from cutout import ungzip
#参数说明
 ungzip(
	data, #文本数据
)

某些网站的内容会采用gzip压缩,需要调用此方法对其进行解压,以获取原文。

setconf 配置

from cutout.mysql import setconf
#参数说明
setconf(
	cursor_type, # 游标风格,
	#  默认   :  pymysql.cursors.Cursor
	#  ss     :  pymysql.cursors.SSCursor
	#  dict   :  pymysql.cursors.DictCursor
	#  ssdict :  pymysql.cursors.SSDictCursor
)
##示例:
setconf(cursor_type="dict") #表示查询的结果以字典形式返回

connect 连接数据库/获取连接

from cutout.mysql import connect
#参数说明
connect(
    dbconf=None,数据库配置
)
## 参数 dbconf 默认值:
_dbConfig = {
	'host':'localhost',
	'user':'root',
	'passwd':'',
	'db':'',
	'port':3306,
	'charset': 'utf8',
	'connect_timeout': 3600,
	'autocommit': False #默认提交事务

}
##示例:
connect(dbconf={"passwd":"????"}); #数据库密码为 "????",其它项为默认值

关于 cutout

cutout是一个开源的工具箱,你可以任意使用它,包括但不限于个人技术研究、商业产品集成。你可以任意修改源代码而不必通知原作者。作者对代码的可靠性,以及在商业项目中使用所造成的收益及损失,不负任何责任。


Github: https://github.com/yangjiePro/cutout

作者: 杨捷

主页: http://jojoin.com/user/1

邮箱: yangjie@jojoin.com

QQ : 446342398