广州楼盘抓取分析1-数据抓取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广州楼盘抓取分析1-数据抓取相关的知识,希望对你有一定的参考价值。

抓取安居客新开楼盘的数据,简单写了个爬虫,没有用什么框架,页面解析用了pyquery,对于有中文的html,解析起来清晰且省事。

# -*- coding: utf-8 -*-
#######################################################################
# Copyright (C) 2005-2016 UC Mobile Limited. All Rights Reserved
# File          : first_sale_spider.py
#
# Creation      : 2016/2/23 19:41
# Author        : alex
#######################################################################

import requests
import re
from pyquery import PyQuery as pq
import mysqldb
import uniout
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

community_list = []

HOST = "127.0.0.1"
USER = "root"
PASSWD = ""
DB = "house_analysis"
PORT = 3306


class DBOperate(object):
    def __init__(self, host, user, passwd, db, port):
        self.host = host
        self.user = user
        self.passwd = passwd
        self.db = db
        self.port = port
        self.conn = MySQLdb.connect(self.host, self.user, self.passwd, self.db, self.port)
        self.cur = self.conn.cursor()

    def insertSql(self,sql):
        self.cur.execute(sql)
        self.conn.commit()

    def __del__(self):
        self.cur.close()
        self.conn.close()


def requestByGet(url):
    r = requests.get(url)
    return r.content

def getNextPage(content):
    m = re.findall(r‘<a href="(.+?)" class="next-page next-link">下一页</a>‘,content)
    if len(m)>0:
        next_url = m[0]
    else:
        next_url = ‘‘
    return next_url

def getCommunityList(content):
    community_urls = re.findall(r‘data-link="(http://gz.fang.anjuke.com/loupan/\d+?.html)"‘,content)
    print "正在采集...",community_urls
    if len(community_urls)>0:
        community_list.extend(community_urls)

def handler(start_url):
    while True:
        content = requestByGet(start_url)
        next_url = getNextPage(content)
        getCommunityList(content)
        if next_url != ‘‘:
            start_url = next_url
            continue
        else:
            break


def getHouseInfo(url):
    p = pq(url)
    name = p(‘h1‘).text().strip()
    style = p(‘.house-item‘).text().split(",")[0].strip()
    price = p(‘.sp-price‘).text().strip()
    l = p(‘.lpAddr-text‘).text()
    location = re.split(‘\[ | \]‘,l)
    area = location[-2].split(‘-‘)[0].strip()
    zone = location[-2].split(‘-‘)[1].strip()
    address = location[-1].strip()
    detail_location = location[-1].strip()
    result = {
        "name": name,
        "area": area,
        "location": zone,
        "detail_location": detail_location,
        "house_style": style,
        "price": price
    }
    return result


def detailPageHandler(cur, detail_url):
    result = getHouseInfo(detail_url)
    print "result:",result
    cur.insertSql("insert into first_sale (name,area,location,detail_location,house_style,price) VALUES(‘%s‘,‘%s‘,‘%s‘,‘%s‘,‘%s‘,‘%s‘)" % (
        result[‘name‘],
        result[‘area‘],
        result[‘location‘],
        result[‘detail_location‘],
        result[‘house_style‘],
        result[‘price‘]
    ))


def main():
    handler("http://gz.fang.anjuke.com/loupan/?from=navigation")
    print community_list
    print "len(community_list)",len(community_list)
    cur = DBOperate(host=HOST, user=USER, passwd=PASSWD, db=DB, port=PORT)
    for each_detail in community_list:
        detailPageHandler(cur, each_detail)

if __name__ == ‘__main__‘:
    main()

 抓取结果如下:

mysql> select * from first_sale;
+-----+--------------------------------+--------------+-----------------+--------------------------------------------------------------------------------------------------+------------------------------------------------+--------+
| id  | name                           | area         | location        | detail_location                                                                                  | house_style                                    | price  |
+-----+--------------------------------+--------------+-----------------+--------------------------------------------------------------------------------------------------+------------------------------------------------+--------+
|  10 | 中国美林湖                     | 花都         | 狮岭            | 山前大道168号                                                                                    | 一室(6) , 二室(14) , 三室(15)                | 6500   |
|  11 | 龙湖首开天宸原著               | 天河         | 车陂            | 奥体路转悦景路600米                                                                              | 三室(4) , 四室(2) , 别墅(2)                  | 30000  |
|  12 | 雅居乐剑桥郡                   | 番禺         | 华南            | 南村镇草堂村地段                                                                                 | 三室(8) , 四室(7)                             | 20750  |
|  13 | 碧桂园凤凰城                   | 增城         | 广园东          | 快速路                                                                                           | 一室(1) , 二室(3) , 三室(10)                 | 13000  |
|  14 | 南沙金茂湾                     | 南沙         | 南沙            | 凤凰大道外国语学院旁                                                                             | 三室(2) , 四室(2) , 商住(3)                  | 15000  |
|  15 | 珠江佳滨苑                     | 海珠         | 东晓            | 海印桥南东晓路与仲恺路交界                                                                       | 二室(3) , 三室(6)                             | 32000  |
|  16 | 时代长岛                       | 南沙         | 南沙            | 进港大道377号(南沙街道旁)                                                                      | 二室(1) , 三室(2)                             | 9000   |
|  17 | 中恒海晖花园                   | 广州周边     | 佛山            | 里水和顺黄金主轴里和大道旁                                                                       | 三室(4)                                        | 7500   |
|  18 | 南沙涉外公馆                   | 南沙         | 南沙            | 进港大道579号                                                                                    | 商住(3)                                        | 13000  |
|  19 | 金地香山湖                     | 增城         | 新塘            | 新新公路15号(广园东路中新出口)                                                                 | 三室(1) , 四室(2)                             | 7300   |
|  20 | 新城国际寓                     | 海珠         | 工业大道        | 江南大道南与工业大道南交汇(第一金碧旁)                                                         | 商住(4)                                        | 25000  |
|  21 | 金融街·融穗澜湾                | 番禺         | 市桥            | 盛泰路与长提东路交界,黄沙岛花园北面                                                             | 三室(3) , 四室(1)                             | 20000  |
|  22 | 江畔雅苑                       | 越秀         | 北京路          | 太平沙牌坊直入(地铁6号线北京路站A出口)                                                         | 一室(1) , 二室(2) , 三室(2)                  | 42000  |
|  23 | 时代春树里                     | 黄埔         | 萝岗            | 开源大道植树公园旁                                                                               | 三室(2) , 四室(1)                             | 14000  |
|  24 | 雅居乐凯茵又一城               | 广州周边     | 其他            | 火炬开发区(凯茵新城纪念中学旁)                                                                 | 三室(1) , 四室(1)                             | 6000   |
|  25 | 时尚广场                       | 增城         | 新塘            | 港口大道北395号                                                                                  | 二室(2) , 三室(2) , 四室(1)                  | 11000  |
|  26 | 时代廊桥增城                   | 增城         | 新塘            | 永宁大道南侧                                                                                     | 二室(1) , 三室(2) , 四室(1)                  | 8800   |
|  27 | 金融街·融穗御府                | 黄埔         | 萝岗            | 长岭路永顺大道(新建长平小学南侧)                                                               | 三室(5)                                        | 13500  |
|  28 | 保利西悦湾                     | 荔湾         | 芳村            | 东漖南路(芳村花园对面)                                                                         | 三室(2) , 四室(1)                             | 25000  |
|  29 | 御华园                         | 花都         | 狮岭            | 狮岭大道东1号                                                                                    | 一室(1) , 二室(9) , 三室(4)                  | 7200   |
|  30 | 奥园康威广场                   | 增城         | 新塘            | 荔新大道和香山大道交汇处                                                                         | 商住(2)                                        | 11000  |
|  31 | 恒大御景湾                     | 白云         | 金沙洲          | 金沙洲大桥沿江北段                                                                               | 二室(6) , 三室(4) , 四室(3)                  | 171    |
|  32 | 珠江帝景紫龙府                 | 海珠         | 广州大道南      | 新领事馆东侧                                                                                     | 四室(2) , 五室及以上(3)                       | 42000  |
|  33 | 万科金色梦想                   | 黄埔         | 萝岗            | 科学城开创大道与开源大道交接处                                                                   | 二室(1) , 三室(9) , 四室(1) 

  

以上是关于广州楼盘抓取分析1-数据抓取的主要内容,如果未能解决你的问题,请参考以下文章

scrapy实践_爬取安居客_广州_新楼盘数据

我用python抓取股票数据炒股,代码拿去

使用 python 抓取谷歌精选片段

App性能:TraceView分析法

java爬虫怎么抓取js动态生成的内容

我用python抓取股票数据炒股,代码拿去