Python爬虫实战之爬取链家广州房价_03存储

问题引入

系列目录:

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套正在出租|南沙|金洲|未知年建成|暂无均价|0http://gz.lianjia.com/xiaoqu/2113328662147633/|叠翠峰|90天成交0套|0套正在出租|南沙|南沙区府|未知年建成|暂无均价|0http://gz.lianjia.com/xiaoqu/2113668346245868/|富力天海湾|90天成交0套|0套正在出租|南沙|金洲|未知年建成|暂无均价|0http://gz.lianjia.com/xiaoqu/2113826645830960/|通大旭日园|90天成交0套|0套正在出租|南沙|金洲|未知年建成|暂无均价|0http://gz.lianjia.com/xiaoqu/2113306909962092/|南沙城|90天成交0套|0套正在出租|南沙|金洲|未知年建成|13226元/m2|0http://gz.lianjia.com/xiaoqu/2114256349654567/|锦珠广场|90天成交0套|0套正在出租|南沙|金洲|2015年建成|暂无均价|0http://gz.lianjia.com/xiaoqu/2112879567532818/|南沙奥园|90天成交0套|0套正在出租|南沙|金洲|未知年建成|7970元/m2|0http://gz.lianjia.com/xiaoqu/2114393419248043/|环城北路|90天成交0套|0套正在出租|南沙|大岗镇|未知年建成|暂无均价|0http://gz.lianjia.com/xiaoqu/2113199275994557/|南沙珠江湾|90天成交0套|0套正在出租|南沙|金洲|未知年建成|10376元/m2|0http://gz.lianjia.com/xiaoqu/2114416717295822/|市南路东涌大街|90天成交0套|0套正在出租|南沙|东涌镇|未知年建成|暂无均价|0

微信公众号「数据分析」,分享数据科学家的自我修养。

Python爬虫实战之爬取链家广州房价_03存储_第1张图片

你可能感兴趣的:(Python爬虫,Python)