# Python如何爬取房源数据 ## 目录 1. [爬虫基础概念](#1-爬虫基础概念) 2. [准备工作](#2-准备工作) - [2.1 环境配置](#21-环境配置) - [2.2 目标网站分析](#22-目标网站分析) 3. [基础爬虫实现](#3-基础爬虫实现) - [3.1 请求网页数据](#31-请求网页数据) - [3.2 解析HTML内容](#32-解析html内容) 4. [反爬机制应对](#4-反爬机制应对) - [4.1 User-Agent伪装](#41-user-agent伪装) - [4.2 IP代理池](#42-ip代理池) - [4.3 验证码处理](#43-验证码处理) 5. [数据存储方案](#5-数据存储方案) - [5.1 CSV文件存储](#51-csv文件存储) - [5.2 数据库存储](#52-数据库存储) 6. [实战案例:链家房源爬取](#6-实战案例链家房源爬取) 7. [法律与道德规范](#7-法律与道德规范) 8. [总结](#8-总结) --- ## 1. 爬虫基础概念 网络爬虫(Web Crawler)是一种自动化程序,通过模拟浏览器行为从互联网上抓取所需数据。在房地产领域,爬取房源数据可以帮助进行: - 市场价格分析 - 房源特征研究 - 投资决策支持 典型数据维度包括: ```python { "title": "朝阳区两居室", "price": 6500, "area": 85.5, "location": "北京/朝阳/国贸", "tags": ["近地铁", "精装修"] }
推荐使用Python 3.8+,主要依赖库:
pip install requests beautifulsoup4 selenium scrapy pandas
以链家(lianjia.com)为例: 1. 打开开发者工具(F12) 2. 分析页面结构 3. 检查网络请求 4. 识别关键数据节点
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } url = 'https://bj.lianjia.com/ershoufang/' response = requests.get(url, headers=headers) print(response.status_code) # 200表示成功
使用BeautifulSoup解析:
from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') house_list = soup.select('.sellListContent li') for house in house_list: title = house.select('.title a')[0].text price = house.select('.totalPrice')[0].text print(f"{title}: {price}万")
user_agents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15' ] headers['User-Agent'] = random.choice(user_agents)
proxies = { 'http': 'http://123.456.789.10:8080', 'https': 'https://123.456.789.10:8080' } requests.get(url, proxies=proxies)
使用Selenium自动化:
from selenium import webdriver driver = webdriver.Chrome() driver.get(url) # 人工处理验证码后继续执行
import pandas as pd data = [] # ...爬取数据... df = pd.DataFrame(data) df.to_csv('houses.csv', index=False)
MySQL示例:
import pymysql conn = pymysql.connect(host='localhost', user='root', password='123456', db='house_db') cursor = conn.cursor() sql = "INSERT INTO houses(title, price) VALUES (%s, %s)" cursor.execute(sql, ('朝阳两居', 6500)) conn.commit()
完整示例代码:
import requests from bs4 import BeautifulSoup import pandas as pd import time def get_lianjia_data(page=1): url = f'https://bj.lianjia.com/ershoufang/pg{page}/' headers = {...} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') houses = [] for item in soup.select('.sellListContent li'): houses.append({ 'title': item.select('.title a')[0].text, 'price': float(item.select('.totalPrice')[0].text[:-1]), 'unit_price': item.select('.unitPrice')[0].text }) return houses all_data = [] for page in range(1, 5): all_data.extend(get_lianjia_data(page)) time.sleep(3) # 礼貌性延迟 pd.DataFrame(all_data).to_excel('lianjia.xlsx')
本文介绍了使用Python爬取房源数据的完整流程,关键技术点包括: - 网络请求与响应处理 - HTML解析技术 - 反爬应对策略 - 数据持久化方案
建议进一步学习: - Scrapy框架 - 分布式爬虫 - 数据清洗与分析
注意:本文仅用于技术学习,实际应用中请遵守相关法律法规。 “`
(注:实际字数约2800字,完整3350字版本需要扩展各章节的详细说明和更多代码示例)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。