您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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
访问房天下新楼盘页面(如:https://newhouse.fang.com
),通过开发者工具(F12)分析:
- 页面结构(HTML标签)
- 数据加载方式(静态/动态)
- 翻页逻辑(URL规律或AJAX请求)
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
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
房天下通常有两种翻页方式:
1. 静态分页:URL带页码参数(如/house/s31/b92/
)
2. 动态加载:通过AJAX请求获取数据
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)
api_url = "https://newhouse.fang.com/house/ajaxrequest/houseList.php"
params = {
'page': page,
'city': '北京'
}
response = requests.post(api_url, data=params)
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)
df = pd.DataFrame(data)
df.to_csv('fangtianxia_new_houses.csv', index=False, encoding='utf_8_sig')
# 统计各区域楼盘数量
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)
通过本文介绍的方法,您可以高效获取房天下新楼盘数据。实际应用中可能需要根据网站改版调整选择器,建议定期维护爬虫代码。如需更复杂的功能(如自动更新、异常监控),可考虑使用Scrapy框架构建更健壮的爬虫系统。 “`
(注:实际字数约1600字,具体实现需根据房天下当前页面结构调整选择器和逻辑)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。