cutout 是一个强大的数据抓取/采集与处理工具箱。
example.py 文件中包含更多示例用法和测试用例。
使用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是cutout的多线程并发版本。
from cutout import cutouts
#参数说明
cutouts(
# url 不使用url参数名
urls=None, #要采集的url地址列表(可遍历字符串列表或元组)
threadback=None, 线程采集完成的回调,参数为采集结果
... # 其它参数与 cutout 相同
)
cutouts将开启多个线程,并等待所有子线程执行完毕后,返回结果数组。
使用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是download的多线程并发版本。
from cutout import downloads
#参数说明
downloads(
# url 不使用url参数名
urls, #要采集的url地址列表(可遍历字符串列表或元组)
files=None, #保存文件名数组
paths=None, #下载路径数组
threadback=None, 线程采集完成的回调,参数为下载结果信息
... # 其它参数与 cutout 相同
)
cutouts将开启多个线程,并等待所有子线程执行完毕后,返回结果数组。
from cutout import get_html
#参数说明
get_html(
url, #要获取的url地址
encoding=None, #对获取的文本进行编码
timeout=None, #超时异常触发事件
)
get_html更加底层,如果仅仅是为了获取html网页内容,推荐使用cutout。
from cutout import url_save
#参数说明
url_save(
url, #要获取的文件url地址
file=None, #保存的文件名
path=None, #下载路径,默认为当前执行路径
headers={}, #下载的请求头,用于伪装等
arrive=None #数据到达回调
)
url_save更加底层,如果仅仅是为了下载文件,推荐使用download。
from cutout import remove_html_tags
#参数说明
remove_html_tags(
htmlstr, #html文本
)
from cutout import url_size
#参数说明
url_size(
url, #要获取大小的文件url地址
)
from cutout import ungzip
#参数说明
ungzip(
data, #文本数据
)
某些网站的内容会采用gzip压缩,需要调用此方法对其进行解压,以获取原文。
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") #表示查询的结果以字典形式返回
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是一个开源的工具箱,你可以任意使用它,包括但不限于个人技术研究、商业产品集成。你可以任意修改源代码而不必通知原作者。作者对代码的可靠性,以及在商业项目中使用所造成的收益及损失,不负任何责任。
Github: https://github.com/yangjiePro/cutout
作者: 杨捷
主页: http://jojoin.com/user/1
邮箱: yangjie@jojoin.com
QQ : 446342398