背景:根据图片网址爬取图片,使用python实现
预习:Hbase数据库中是列族,可以根据列族:列名设置自己储存的列信息,列名可以自由添加和设置,灵活度很高
1、使用urllib 保存到本地或者其他地址(数据库暂时还没有尝试)
import urllib
urllib.request.urlretrieve(imgurl, 'tmp.jpg')
2、使用 opencv+urllib+numpy 比较复杂,但是可以转换为矩阵表示的图片变量,进行操作
from bs4 import BeautifulSoup
from urllib.request import urlopen
import requests
import urllib
from cv2 import *
import numpy as np
urlText=readHtmlsoup(url)
div=urlText.find('li',{'data-title':'户型图(1/1)'})
img=div.find('img')
imgurl=img.attrs['imglazyload-src']
imgname=img.attrs['alt']
print(imgname,imgurl)
#urllib.request.urlretrieve(imgurl, 'tmp.jpg')#url数据恢复 直接保存
resp = urlopen(imgurl)
image = np.asarray(bytearray(resp.read()), dtype="uint8")#转换二进制数组
image = imdecode(image, IMREAD_COLOR)#彩色图进行解码 自动转化为合适的size RGB 图
imshow("image", image)#显示验证
waitKey(0)
3、将网页上的图片存储到hbase数据库并读取下载到本地
python环境中 利用pip install *** 安装 thrift hbase-thrift happybase 三个工具包
import time
#liyong code test 向hbase数据库中写入数据
IMAGE_URL = "image url"
import requests
r = requests.get(IMAGE_URL)
import happybase
connection = happybase.Connection('hostip', table_prefix=b'DBname',table_prefix_separator=b':')#其中的b表示二进制数据,整个表都是二进制存储
connection.open()
table = connection.table(bytes("tablename", encoding = "utf8"))
attribs = {}
attribs['picture:value'] = r.content #picture是列族名,value是可以自定义的列名 同一个表中的不同数据都可以任意添加
imagename='zxtest'
#info={'modelid':'001','imagename':imagename,'posttime':time.strftime('%Y-%m-%d #%H:%M:%S',time.localtime(time.time()))}#info是第二个列名 这个必须是str type
attribs['info:modelid']='001'
attribs['info:modelname']=modelname
rowkey='test'#数据的唯一标识,类似sql中的主键
table.put(row=bytes(rowkey, encoding = "utf8"),data=attribs) #添加一条数据
#table.put(b'zxrtest',attribs)
#从hbase数据库中读取数据都本地
import happybase
connection = happybase.Connection('hostip', table_prefix=b'DBname',table_prefix_separator=b':')#连接数据库
connection.open()
table = connection.table(bytes("tablename", encoding = "utf8"))
r = table.row(b'zxtest') #参数就是row key
rs=table.scan()#扫描表中的数据 也可以加参数限制
for key,v in rs:
print(key,v)
with open('ttt.jpg','wb') as f:
f.write(r[b'picture:value'])#和列名对应
4、hbase 的其他常用操作(python)
下面的table均是已经连接hbase成功的表对象
rows=table.rows([b'test', b'test1', b'zxrtest']),获取某个rowkey对应的数据,括号中是rowkey list
table.delete(rowkeyname)删除rowkeyname对应的数据,一次只能删除一个
table.delete(rowkeyname,columns=[列族:列名1,列族:列名2])删除其中的一列或者几列
初步学习,如有错误,欢迎留言指出~