美文网首页大数据 爬虫Python AI Sql
Python爬虫实战之爬取链家广州房价_03存储

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

作者: padluo | 来源:发表于2018-01-08 09:30 被阅读171次

    问题引入

    系列目录:

    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套
    

    微信公众号「数据分析」,分享数据科学家的自我修养,既然遇见,不如一起成长。

    Telegram Group:

    https://t.me/sspadluo

    数据分析

    转载请注明:转载自微信公众号「数据分析」


    相关文章

      网友评论

        本文标题:Python爬虫实战之爬取链家广州房价_03存储

        本文链接:https://www.haomeiwen.com/subject/lnmvnxtx.html