Python如何爬取房天下新楼盘信息

发布时间:2021-11-25 14:32:44 作者:小新
来源:亿速云 阅读:248
# Python如何爬取房天下新楼盘信息

## 前言

在房地产行业数据分析中,获取新楼盘信息是市场研究的重要环节。房天下(Fang.com)作为国内领先的房地产门户网站,汇集了大量新楼盘数据。本文将详细介绍如何使用Python爬取房天下新楼盘信息,包括项目名称、价格、户型、开发商等关键数据。

---

## 一、准备工作

### 1.1 技术选型
- **编程语言**:Python 3.8+
- **核心库**:
  - `requests`:发送HTTP请求
  - `BeautifulSoup`/`lxml`:解析HTML
  - `pandas`:数据存储与分析
  - `time`:设置爬虫延迟
- **可选工具**:
  - Selenium(应对动态渲染页面)
  - ProxyPool(IP代理池)

### 1.2 环境安装
```bash
pip install requests beautifulsoup4 pandas lxml

1.3 目标分析

访问房天下新楼盘页面(如:https://newhouse.fang.com),通过开发者工具(F12)分析: - 页面结构(HTML标签) - 数据加载方式(静态/动态) - 翻页逻辑(URL规律或AJAX请求)


二、爬虫实现步骤

2.1 获取单页数据

import requests
from bs4 import BeautifulSoup
import pandas as pd

def get_one_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    try:
        response = requests.get(url, headers=headers, timeout=10)
        if response.status_code == 200:
            return response.text
    except Exception as e:
        print(f"请求失败: {e}")
        return None

2.2 解析页面内容

def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    houses = soup.select('.nlcd_name a')  # 根据实际页面结构调整选择器
    
    data = []
    for house in houses:
        try:
            item = {
                'name': house.get_text().strip(),
                'price': house.find_next('div', class_='nhouse_price').text,
                'address': house.find_next('div', class_='address').text,
                'developer': house.find_next('div', class_='fangyuan').text
            }
            data.append(item)
        except AttributeError:
            continue
    return data

2.3 处理翻页逻辑

房天下通常有两种翻页方式: 1. 静态分页:URL带页码参数(如/house/s31/b92/) 2. 动态加载:通过AJAX请求获取数据

方案1:静态分页

base_url = "https://newhouse.fang.com/house/s31/b9{}/"
for page in range(1, 11):  # 爬取前10页
    url = base_url.format(page)
    html = get_one_page(url)
    data = parse_html(html)

方案2:动态分页(需分析XHR请求)

api_url = "https://newhouse.fang.com/house/ajaxrequest/houseList.php"
params = {
    'page': page,
    'city': '北京'
}
response = requests.post(api_url, data=params)

三、反爬应对策略

3.1 常见反爬措施

3.2 优化代码

from fake_useragent import UserAgent
import random
import time

def get_random_ua():
    return UserAgent().random

def safe_request(url):
    headers = {'User-Agent': get_random_ua()}
    proxies = {
        'http': 'http://proxy_ip:port',
        'https': 'https://proxy_ip:port'
    }
    time.sleep(random.uniform(1, 3))  # 随机延迟
    return requests.get(url, headers=headers, proxies=proxies)

四、数据存储与分析

4.1 存储到CSV

df = pd.DataFrame(data)
df.to_csv('fangtianxia_new_houses.csv', index=False, encoding='utf_8_sig')

4.2 简单数据分析示例

# 统计各区域楼盘数量
district_counts = df['address'].str.extract(r'\[(.*?)\]')[0].value_counts()
print(district_counts.head(10))

五、完整代码示例

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

class FangSpider:
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        self.base_url = "https://newhouse.fang.com/house/s31/b9{}/"
    
    def get_data(self, max_pages=10):
        all_data = []
        for page in range(1, max_pages + 1):
            url = self.base_url.format(page)
            html = self.get_html(url)
            if html:
                page_data = self.parse_html(html)
                all_data.extend(page_data)
            time.sleep(2)
        return all_data
    
    def get_html(self, url):
        try:
            response = requests.get(url, headers=self.headers)
            return response.text if response.ok else None
        except Exception as e:
            print(f"Error fetching {url}: {e}")
            return None
    
    def parse_html(self, html):
        # 实现解析逻辑
        pass

if __name__ == '__main__':
    spider = FangSpider()
    data = spider.get_data()
    pd.DataFrame(data).to_csv('new_houses.csv', index=False)

六、注意事项

  1. 遵守robots.txt:检查房天下的爬虫协议
  2. 控制请求频率:避免对服务器造成压力
  3. 数据使用规范:仅用于学习研究,禁止商业用途
  4. 动态内容处理:部分数据可能需要渲染JS,可配合Selenium使用

结语

通过本文介绍的方法,您可以高效获取房天下新楼盘数据。实际应用中可能需要根据网站改版调整选择器,建议定期维护爬虫代码。如需更复杂的功能(如自动更新、异常监控),可考虑使用Scrapy框架构建更健壮的爬虫系统。 “`

(注:实际字数约1600字,具体实现需根据房天下当前页面结构调整选择器和逻辑)

推荐阅读:
  1. Python如何爬取京东的评价信息
  2. python爬取主播信息

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:高仿Android QQ2012登陆界面和注册界面是怎样的

下一篇:怎么用Python数据分析员工们的工作效率和整体满意度

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》