Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

作者 徐麟

本文经授权转自公众号数据森麟(ID: shujusenlin)

房价高是北漂们一直关心的话题,本文就对北京的二手房数据进行了分析。

本文主要分为两部分:Python爬取赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考。

01

立即学习“Python免费学习笔记(深入)”;

Python爬取赶集网北京二手房数据

入门爬虫一个月,所以对每一个网站都使用了Xpath、Beautiful Soup、正则三种方法分别爬取,用于练习巩固。数据来源如下:

Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

Xpath爬取:

这里主要解决运用Xpath如何判断某些元素是否存在的问题,比如如果房屋没有装修信息,不加上判断,某些元素不存在就会导致爬取中断。

代码语言:javascript代码运行次数:0运行复制

import requestsfrom lxml import etreefrom requests.exceptions import RequestExceptionimport multiprocessingimport timeheaders = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}def get_one_page(url):    try:        response = requests.get(url, headers=headers)        if response.status_code == 200:            return response.text        return None    except RequestException:        return Nonedef parse_one_page(content):    try:        selector = etree.HTML(content)        ALL = selector.xpath('//*[@id="f_mew_list"]/div[6]/div[1]/div[3]/div[1]/div')        for div in ALL:            yield {                'Name': div.xpath('dl/dd[1]/a/text()')[0],                'Type': div.xpath('dl/dd[2]/span[1]/text()')[0],                'Area': div.xpath('dl/dd[2]/span[3]/text()')[0],                'Towards': div.xpath('dl/dd[2]/span[5]/text()')[0],                'Floor': div.xpath('dl/dd[2]/span[7]/text()')[0].strip().replace('', ""),                'Decorate': div.xpath('dl/dd[2]/span[9]/text()')[0],                #地址需要特殊处理一下                'Address': div.xpath('dl/dd[3]//text()')[1]+div.xpath('dl/dd[3]//text()')[3].replace('','')+div.xpath('dl/dd[3]//text()')[4].strip(),                'TotalPrice': div.xpath('dl/dd[5]/div[1]/span[1]/text()')[0] + div.xpath('dl/dd[5]/div[1]/span[2]/text()')[0],                'Price': div.xpath('dl/dd[5]/div[2]/text()')[0]            }        if div['Name','Type','Area','Towards','Floor','Decorate','Address','TotalPrice','Price'] == None:##这里加上判断,如果其中一个元素为空,则输出None            return None    except Exception:        return Nonedef main():    for i in range(1, 500):#这里设置爬取500页数据,在数据范围内,大家可以自设置爬取的量        url = 'http://bj.ganji.com/fang5/o{}/'.format(i)        content = get_one_page(url)        print('第{}页抓取完毕'.format(i))        for div in parse_one_page(content):            print(div)if __name__ == '__main__':    main()

Beautiful Soup爬取:

代码语言:javascript代码运行次数:0运行复制

import requestsimport refrom requests.exceptions import RequestExceptionfrom bs4 import BeautifulSoupimport csvimport timeheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}def get_one_page(url):    try:        response = requests.get(url,headers = headers)        if response.status_code == 200:            return response.text        return None    except RequestException:        return Nonedef parse_one_page(content):    try:        soup = BeautifulSoup(content,'html.parser')        items = soup.find('div',class_=re.compile('js-tips-list'))        for div in items.find_all('div',class_=re.compile('ershoufang-list')):            yield {                'Name':div.find('a',class_=re.compile('js-title')).text,                'Type': div.find('dd', class_=re.compile('size')).contents[1].text,#tag的 .contents 属性可以将tag的子节点以列表的方式输出                'Area':div.find('dd',class_=re.compile('size')).contents[5].text,                'Towards':div.find('dd',class_=re.compile('size')).contents[9].text,                'Floor':div.find('dd',class_=re.compile('size')).contents[13].text.replace('',''),                'Decorate':div.find('dd',class_=re.compile('size')).contents[17].text,                'Address':div.find('span',class_=re.compile('area')).text.strip().replace(' ','').replace('',''),                'TotalPrice':div.find('span',class_=re.compile('js-price')).text+div.find('span',class_=re.compile('yue')).text,                'Price':div.find('div',class_=re.compile('time')).text            }        #有一些二手房信息缺少部分信息,如:缺少装修信息,或者缺少楼层信息,这时候需要加个判断,不然爬取就会中断。        if div['Name', 'Type', 'Area', 'Towards', 'Floor', 'Decorate', 'Address', 'TotalPrice', 'Price'] == None:                return None    except Exception:        return Nonedef main():    for i in range(1,50):        url = 'http://bj.ganji.com/fang5/o{}/'.format(i)        content = get_one_page(url)        print('第{}页抓取完毕'.format(i))        for div in parse_one_page(content):            print(div)        with open('Data.csv', 'a', newline='') as f:  # Data.csv 文件存储的路径,如果默认路径就直接写文件名即可。            fieldnames = ['Name', 'Type', 'Area', 'Towards', 'Floor', 'Decorate', 'Address', 'TotalPrice', 'Price']            writer = csv.DictWriter(f, fieldnames=fieldnames)            writer.writeheader()            for item in parse_one_page(content):                writer.writerow(item)        time.sleep(3)#设置爬取频率,一开始我就是爬取的太猛,导致网页需要验证。if __name__=='__main__':    main()

正则爬取:我研究了好久,还是没有解决。

这一过程中容易遇见的问题有:

有一些房屋缺少部分信息,如缺少装修信息,这个时候需要加一个判断,如果不加判断,爬取就会自动终止(我在这里跌了很大的坑)。Data.csv知识点存储文件路径默认是工作目录,关于Python中如何查看工作目录:代码语言:javascript代码运行次数:0运行复制

import os #查看pyhton 的默认工作目录print(os.getcwd())#修改时工作目录os.chdir('e:workpython')print(os.getcwd())#输出工作目录e:workpython

爬虫打印的是字典形式,每个房屋信息都是一个字典,由于Python中excel相关库是知识盲点,所以爬虫的时候将字典循环直接写入了CSV。

Pycharm中打印如下:

Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

将字典循环直接写入CSV效果如下:

Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

很多初学者对于Address不知如何处理,这里强调一下Beautiful Soup 中.contents的用法,亲身体会,我在这里花了好多时间才找到答案。

Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

02

R对爬取的二手房房价做一般线性回归分析

下面我们用R对抓取的赶集网北京二手房数据做一些简单的分析。

数据的说明

数据清洗

代码语言:javascript代码运行次数:0运行复制

data<-read.csv("E://Data For R/RData/data.csv")DATA<-data[,-c(1,7)]#将Name和Address两列去掉DATA[sample(1:nrow(DATA),size=10),]
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

代码语言:javascript代码运行次数:0运行复制

#在爬取的时候加入了判断,所以不知道爬取的数据中是否存在缺失值,这里检查一下colSums(is.na(DATA))
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

代码语言:javascript代码运行次数:0运行复制

#这里将Type的卧室客厅和卫生间分为三个不同的列##这里需要注意,有一些房屋没有客厅如:1室1卫这时候需要单独处理,还有一些没有厕所信息。library(tidyr)library(stringr)DATA=separate(data=DATA,col=Type,into = c("Bedrooms","Halls"),sep="室")DATA=separate(data=DATA,col=Halls,into = c("Halls","Toilet"),sep="厅")##将卫生间后面的汉字去掉DATA$Toilet<-str_replace(DATA$Toilet,"卫","")###如图六,将Halls中带有汉字去掉,因为有一些房屋信息没有客厅,如:1室1厅,在分成卧室和客厅时,会将卫生间分到客厅一列。DATA$Halls<-str_replace(DATA$Halls,"卫","")##取出没有客厅信息的数据,这些数据被separate到Halls列newdata<-DATA[which(DATA$Toilet %in% NA),2]newdata##将没有客厅的房屋信息Halls列填充为0DATA[which(DATA$Toilet %in% NA),2]<-0DATA[which(DATA$Toilet %in% NA),3]<-newdatacolSums(DATA=="")  Bedrooms      Halls     Toilet       Area    Towards      Floor   Decorate          0          0          2          0          0          0          0 TotalPrice      Price          0          0 ##发现有2个厕所没有信息,将其填写为0。DATA$Toilet[DATA$Toilet == ""]<-0
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

代码语言:javascript代码运行次数:0运行复制

##这里将Area后的㎡去掉DATA$Area<-str_replace(DATA$Area,"㎡","")##查看Towards的类型table(DATA$Towards)Towards    北向  东北向  东南向  东西向    东向  南北向    南向  西北向      51      25      23      50      65      32    1901     678      38  西南向    西向      28      26 ##将Floor信息带括号的全部去除DATA$Floor<-str_replace(DATA$Floor,"[(].*[)]","")##正则表达式#查看Floor的类别信息 低层  地下  高层 共1层 共2层 共3层 共4层 共5层  中层   632    32   790    36    61   101    68   130  1016 #分别将TotalPrice和Price后面的万元、元/㎡去掉DATA$TotalPrice<-str_replace(DATA$TotalPrice,"万元","")DATA$Price<-str_replace(DATA$Price,"元/㎡","")head(DATA)
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

代码语言:javascript代码运行次数:0运行复制

##将数据转换格式DATA$Bedrooms<-as.factor(DATA$Bedrooms)DATA$Halls<-as.factor(DATA$Halls)DATA$Toilet<-as.factor(DATA$Toilet)DATA$Area<-as.numeric(DATA$Area)DATA$TotalPrice<-as.numeric(DATA$TotalPrice)DATA$Price<-as.numeric(DATA$Price)DATA$Towards<-as.factor(DATA$Towards)DATA$Decorate<-as.factor(DATA$Decorate)str(DATA)
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码

以上就是Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/40653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 09:30:13
下一篇 2025年11月6日 09:31:01

相关推荐

  • 做空狗狗币爆仓了怎么办?如何减少损失?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 做空狗狗币遭遇爆仓是一个令人沮丧的经历。在这种情况下,关注的核心是如何处理当前的局面,并尽量控制可能产生的进一步影响。爆仓意味着您的保证金不足以维持仓位,交易平台已…

    2025年12月8日
    000
  • 币圈合约交割是啥?交割会强制平仓吗?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 在币圈,合约交易是一种常见的派生品交易方式。它允许交易者在不实际持有基础加密货币的情况下,对未来某个时间点或价格进行投机或对冲。合约有不同的类型,其中一种就是带有明…

    2025年12月8日
    000
  • 欧交易所官网注册入口开放 网页版快速注册通道及安全验证链接

    欧易okx是全球知名的数字资产交易平台之一,为用户提供多种加密货币的交易服务。本文旨在为您提供欧易okx官网入口,帮助您快速了解并注册。只需点击本文提供的官方入口链接,即可便捷地开始您的注册流程。 欧易OKX官网注册入口: 欧易OKX官方app下载: 想要进入欧易OKX官方网站进行注册?找到正确的入…

    2025年12月8日
    000
  • CEX和DEX哪个好?去中心化交易所更安全?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 中心化交易所(CEX)与去中心化交易所(DEX)是加密资产交易领域的两种核心平台模式。它们各自拥有独特的设计理念和操作机制,在用户体验、安全性、资产控制以及功能特性…

    2025年12月8日
    000
  • 区块链DEX是什么?DEX和CEX有什么区别?

    binance币安交易所 注册入口: APP下载: 欧易OKX交易所 注册入口: APP下载: 火币交易所: 注册入口: APP下载: 区块链技术的出现,不仅带来了数字货币,还催生了新的交易场所形式。去中心化交易所(DEX)与中心化交易所(CEX)是目前加密资产领域中最主要的两种交易平台类型,它们在…

    2025年12月8日
    000
  • 必安交易平台最新版V2.102.3 APP安装及开户教程

    必安交易平台最新版V2.102.3 APP[adid]93db85ed909c13838ff95ccfa94cebd9[/adid]安装及开户教程旨在为用户提供便捷、安全的数字资产交易体验。本次更新的V2.102.3版本在用户界面、交易速度和安全性方面都进行了优化,力求为用户带来更流畅、更稳定的交易…

    2025年12月8日 好文分享
    000
  • okex易欧交易所2025官方最新版本 okex安卓正版下载v6.126.1

    OKEx易欧交易所作为全球领先的数字资产交易平台,一直致力于为用户提供安全、稳定、便捷的交易服务。为了让您能够第一时间体验OKEx易欧交易所的最新功能,享受更流畅的交易体验,我们特别为您准备了这份详细的OKEx易欧交易所2025官方最新版本(v6.126.1)安卓正版APP下载安装教程。 欧易okx…

    2025年12月8日
    000
  • 欧易okx交易所APP最新版 欧易okx官方正版v6.126.1

    欢迎使用欧易okx交易所app,这是一个领先的数字资产交易平台,致力于为全球用户提供安全、专业、便捷的数字资产交易及管理服务。平台支持多种数字货币的交易,并提供丰富的金融衍生品。本文将为您提供欧易okx交易所app的官方正版下载链接,确保您下载到安全可靠的应用版本。 欧易官网直达: 欧易官方app:…

    2025年12月8日
    000
  • 易欧交易所APP安卓版 易欧okx官方正版v6.126.1

    易欧交易所(OKX)APP安卓版是数字资产管理的理想选择。作为全球领先的交易平台,OKX提供币币交易、合约交易、Staking、DeFi挖k等多种功能,支持数百种加密货币交易,并为新手提供教程与模拟交易;平台严格遵守法规,采用多重安全机制保障资产安全,用户可通过官网扫码下载最新版本,投资需谨慎,账户…

    2025年12月8日
    000
  • 如何从欧易官网获取App 欧易交易平台App的正版安装方式

    欧易(OKX)作为全球领先的数字资产交易平台,为用户提供了便捷的App交易体验。为了确保您下载到安全可靠的官方版本,避免下载到假冒App,本文将为您提供详细的欧易App下载安装教程,并提供官方App下载链接,您只需按照以下步骤操作,即可轻松安装正版欧易App,畅享安全便捷的数字资产交易服务。请注意,…

    2025年12月8日
    000
  • 币安APP官方正版安全链接 币安官方APP正版v2.105.3安装入口

    它更是一个庞大的生态系统,为用户提供全方位的数字资产服务。从现货交易到期货交易,从杠杆交易到期权交易,币安涵盖了几乎所有主流的数字资产交易方式。此外,币安还提供诸如币安宝、流动性挖矿、新币挖矿等多种理财产品,帮助用户实现数字资产的增值。 币安 Binance 交易所 尤其注重用户体验,其简洁明了的界…

    2025年12月8日
    000
  • OKX欧义交易所最新中文版客户端注册入口

    OKX 欧易交易所,作为全球领先的数字资产交易平台,一直致力于为用户提供安全、稳定、便捷的交易体验。为了更好地服务广大中文用户,OKX 欧易推出了最新的中文版客户端,无论您是经验丰富的交易员,还是刚刚踏入数字货币领域的新手,这款客户端都将成为您探索数字资产世界的理想工具。 现在,就让我们一起探索如何…

    2025年12月8日
    000
  • 最安全靠谱的虚拟币交易平台软件推荐2025

    2025年最安全靠谱的虚拟币交易平台app: Binance(币安): 作为全球领先的虚拟币交易平台,币安以其卓越的安全性和丰富的币种选择而闻名。 币安拥有强大的安全团队和先进的安全技术,为用户提供全方位的安全保障。其交易深度在全球名列前茅,确保用户可以以最优价格进行交易。 安全性: 币安采用多层安…

    2025年12月8日
    000
  • 币安Binance官网登陆最新地址 币安Binance交易所官方网站

    要获取币安官网最新登陆地址,请通过官方渠道访问以确保安全。1. 访问指定链接:2. 将该链接添加至浏览器收藏夹以便快速登录。注册账户步骤包括:下载币安App、点击“下载”按钮、选择所在国家/地区、使用邮箱或手机号创建账户、设置强密码、完成KYC验证。 币安Binance官网登陆最新地址: 币安bin…

    2025年12月8日
    000
  • 易欧交易所最新版下载 易欧交易所下载教程苹果

    易欧交易所(OKX)最新版可通过官网、应用商店及邀请链接下载,苹果设备用户可按步骤完成安装。1. 官网下载:访问OKX官方网站,选择对应系统版本下载;2. 应用商店下载:Android用户可在Google Play搜索下载,iOS用户需切换Apple ID地区至允许上架的区域后下载;3. 邀请链接下…

    2025年12月8日
    000
  • 欧交易所app官网登录入口 欧交易所客户端登录平台

    欧易提供App和网页版两种登录方式以满足用户需求。1.访问官网;2.下载App安装包;3.安装并打开App;4.登录或注册账户。网页版登录步骤包括:1.打开浏览器;2.输入网址进入官网;3.点击“登录”按钮;4.选择账户密码、手机验证码或谷歌验证码登录方式完成登录。 欧交易所(以下简称“欧易”)作为…

    2025年12月8日
    000
  • 必安binance下载链接 必安binance下载路径

    如何下载Binance应用程序?1.访问Binance官网,输入正确网址进入官方网站;2.选择设备类型,包括iOS、Android和桌面版;3.点击对应下载链接,前往App Store或Google Play Store下载安装。Binance作为全球领先的加密货币交易平台,提供丰富的交易品种、高流…

    2025年12月8日
    000
  • 2025币安交易所APP安卓正版v2.102.5官方安装包

    数字货币交易日益普及,币安作为全球领先的加密货币交易所,其官方APP为用户提供了便捷的交易体验。为了让您更安全、更快捷地使用币安APP进行交易,本文将为您提供2025币安交易所APP安卓正版v2.102.5官方安装包的下载安装教程。 币安注册官网网址: 通过本文提供的官方APP下载链接,您可以直接下…

    2025年12月8日
    000
  • OKX平台网页版登录地址 OKX网页版最新入口

    想要安全便捷地进入 okx 平台进行数字资产交易?okx 网页版为你提供了一个稳定可靠的选择。通过网页版,你无需下载任何客户端,即可在浏览器中直接访问 okx 的各项功能,包括交易、充提币、查看行情、参与活动等等。无论你使用 windows、macos 还是 linux 系统,只要拥有一个现代浏览器…

    2025年12月8日
    000
  • 币安下载教程最新2025

    2025年币安App下载需通过官网访问备用链接,选择设备类型下载安装,注册时可选邮箱或手机号并完成身份认证,同时启用双重验证保障账户安全。 币安App下载官方指南 1、请务必通过官方渠道下载App,您可以直接复制以下链接到浏览器中打开,然后完成下载、安装。 2、下载链接: 3、注意:如果遇到下载链接…

    2025年12月8日 好文分享
    000

发表回复

登录后才能评论
关注微信