系列目录:
Python爬虫实战之爬取链家广州房价_01简单的单页爬虫
Python爬虫实战之爬取链家广州房价_02把小爬虫变大
这一小节主要讲一下前面一直没有实现的存储,存储主要分两大类:文件和数据库。结合这次爬虫的数据量及后期分析的需要,这次主要介绍SQLite。
通过对SQLite数据库的封装,处理多线程的写入。Python的DB-API接口主要处理Connection对象和Curson对象,应用与数据库之间通信需要建立数据库连接,当一个连接(或连接池)建立后,可以创建一个游标,向数据库发送请求,然后从数据库中接收回应,对象的属性和方法可参考官方的文档说明。关于多线程和数据库的结合,还在摸索当中。
至此完成了对链家广州地区所有小区信息的爬取,可以此为模板实现对在售楼盘和成交记录的爬取,并扩展到其他城市、其他房产APP的爬取,对爬取后的数据进行分析。
class SQLiteWraper(object):
"""SQLite数据库的封装,处理多线程写入
"""
def __init__(self, path, command='', *args, **kwargs):
self.lock = threading.RLock()
self.path = path
if command != '':
conn = self.get_conn()
cu = conn.cursor()
cu.execute(command)
def get_conn(self):
conn = sqlite3.connect(self.path)
conn.text_factory = str
return conn
def conn_close(self, conn=None):
conn.close()
def conn_trans(func):
def connection(self, *args, **kwargs):
self.lock.acquire()
conn = self.get_conn()
kwargs['conn'] = conn
rs = func(self, *args, **kwargs)
self.conn_close(conn)
self.lock.release()
return rs
return connection
@conn_trans
def execute(self, command, method_flag=0, conn=None):
cu = conn.cursor()
try:
if not method_flag:
cu.execute(command)
else:
cu.execute(command[0], command[1])
conn.commit()
except sqlite3.IntegrityError, e:
print e
return -1
except Exception, e:
print e
return -2
return 0
结果如下:
sqlite> select * from xiaoqu limit 10;
http://gz.lianjia.com/xiaoqu/2113328145985364/|盈港国际|90天成交0套|0套正在出租|南沙|金洲|未知年建成|暂无均价|0套
http://gz.lianjia.com/xiaoqu/2113328662147633/|叠翠峰|90天成交0套|0套正在出租|南沙|南沙区府|未知年建成|暂无均价|0套
http://gz.lianjia.com/xiaoqu/2113668346245868/|富力天海湾|90天成交0套|0套正在出租|南沙|金洲|未知年建成|暂无均价|0套
http://gz.lianjia.com/xiaoqu/2113826645830960/|通大旭日园|90天成交0套|0套正在出租|南沙|金洲|未知年建成|暂无均价|0套
http://gz.lianjia.com/xiaoqu/2113306909962092/|南沙城|90天成交0套|0套正在出租|南沙|金洲|未知年建成|13226元/m2|0套
http://gz.lianjia.com/xiaoqu/2114256349654567/|锦珠广场|90天成交0套|0套正在出租|南沙|金洲|2015年建成|暂无均价|0套
http://gz.lianjia.com/xiaoqu/2112879567532818/|南沙奥园|90天成交0套|0套正在出租|南沙|金洲|未知年建成|7970元/m2|0套
http://gz.lianjia.com/xiaoqu/2114393419248043/|环城北路|90天成交0套|0套正在出租|南沙|大岗镇|未知年建成|暂无均价|0套
http://gz.lianjia.com/xiaoqu/2113199275994557/|南沙珠江湾|90天成交0套|0套正在出租|南沙|金洲|未知年建成|10376元/m2|0套
http://gz.lianjia.com/xiaoqu/2114416717295822/|市南路东涌大街|90天成交0套|0套正在出租|南沙|东涌镇|未知年建成|暂无均价|0套
微信公众号「数据分析」,分享数据科学家的自我修养。