其实房产网站源码分享程序的问题并不复杂,但是又很多的朋友都不太了解房产中介网站源码,因此呢,今天小编就来为大家分享房产网站源码分享程序的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
来源:CSDN
本文约3500字,建议阅读9分钟。
本文根据Python爬取了赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考。
房价高是北漂们一直关心的话题,本文就对北京的二手房数据进行了分析。
本文主要分为两部分:Python爬取赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考。
Python爬取赶集网北京二手房数据
入门爬虫一个月,所以对每一个网站都使用了Xpath、BeautifulSoup、正则三种方法分别爬取,用于练习巩固。数据来源如下:
Xpath爬取:
这里主要解决运用Xpath如何判断某些元素是否存在的问题,比如如果房屋没有装修信息,不加上判断,某些元素不存在就会导致爬取中断。
importrequestsfromlxmlimportetreefromrequests.exceptionsimportRequestExceptionimportmultiprocessingimporttimeheaders={‘User-Agent’:’Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/537.36′}defget_one_page(url):try:response=requests.get(url,headers=headers)ifresponse.status_code==200:returnresponse.textreturnNoneexceptRequestException:returnNonedefparse_one_page(content):try:selector=etree.HTML(content)ALL=selector.xpath(‘//*[@id=”f_mew_list”]/div[6]/div[1]/div[3]/div[1]/div’)fordivinALL: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(‘\\n’,””),’Decorate’:div.xpath(‘dl/dd[2]/span[9]/text()’)[0],这里设置爬取500页数据,在数据范围内,大家可以自设置爬取的量url=’http://bj.ganji.com/fang5/o{}/’.format(i)content=get_one_page(url)
BeautifulSoup爬取:
importrequestsimportrefromrequests.exceptionsimportRequestExceptionfrombs4importBeautifulSoupimportcsvimporttimeheaders={‘User-Agent’:’Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/55.0.2883.87Safari/537.36′}defget_one_page(url):try:response=requests.get(url,headers=headers)ifresponse.status_code==200:returnresponse.textreturnNoneexceptRequestException:returnNonedefparse_one_page(content):try:soup=BeautifulSoup(content,’html.parser’)items=soup.find(‘div’,class_=re.compile(‘js-tips-list’))fordivinitems.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,有一些二手房信息缺少部分信息,如:缺少装修信息,或者缺少楼层信息,这时候需要加个判断,不然爬取就会中断。ifdiv[‘Name’,’Type’,’Area’,’Towards’,’Floor’,’Decorate’,’Address’,’TotalPrice’,’Price’]==None:returnNoneexceptException:returnNonedefmain():foriinrange(1,50):url=’http://bj.ganji.com/fang5/o{}/’.format(i)content=get_one_page(url)print(‘第{}页抓取完毕’.format(i))fordivinparse_one_page(content):print(div)withopen(‘Data.csv’,’a’,newline=”)asf:设置爬取频率,一开始我就是爬取的太猛,导致网页需要验证。if__name__==’__main__’:
正则爬取:我研究了好久,还是没有解决。
这一过程中容易遇见的问题有:
有一些房屋缺少部分信息,如缺少装修信息,这个时候需要加一个判断,如果不加判断,爬取就会自动终止(我在这里跌了很大的坑)。Data.csv知识点存储文件路径默认是工作目录,关于Python中如何查看工作目录:importos修改时工作目录os.chdir(‘e:\\\\workpython’)print(os.getcwd())将Name和Address两列去掉DATA[sample(1:nrow(DATA),size=10),]这里将Type的卧室客厅和卫生间分为三个不同的列\n这里需要注意,有一些房屋没有客厅如:1室1卫这时候需要单独处理,还有一些没有厕所信息。\nlibrary(tidyr)\nlibrary(stringr)\nDATA=separate(data=DATA,col=Type,into=c(“Bedrooms”,”Halls”),sep=”室”)\nDATA=separate(data=DATA,col=Halls,into=c(“Halls”,”Toilet”),sep=”厅”)\n将卫生间后面的汉字去掉\nDATA$Toilet<-str_replace(DATA$Toilet,”卫”,””)\n查看Floor的类别信息\n低层地下高层共1层共2层共3层共4层共5层中层\n632327903661101681301016\n探究卫生间与总价的关系\ntable(DATA$Toilet)\n012345679\n221424701167426720\n#这里将卫生间数为0、6和7的去掉\nDATA<-DATA[-(which(DATA$Toilet%in%”0″)),]\nDATA<-DATA[-(which(DATA$Toilet%in%”6″)),]\nDATA<-DATA[-(which(DATA$Toilet%in%”7″)),]\ntable(DATA$Toilet)\n012345679\n021424701167426000\nggplot(DATA,aes(x=Toilet,y=TotalPrice))+geom_boxplot(col=”red”)\n
一般卧室数越多,卫生间数也越多,即卫生间数越多,总价越高。
探究Area与TotalPrice的关系
ggplot(DATA,aes(x=Area,y=TotalPrice))+geom_point(col=’red’)\n
这个完全符合住房面积越大,总价越高。
探究Towards与TotalPrice的关系
ggplot(DATA,aes(x=Towards,y=TotalPrice))+geom_boxplot(col=”red”)\n
探究Floor与TotalPrice的关系
ggplot(DATA,aes(x=Floor,y=TotalPrice))+geom_boxplot(col=”red”)\n
图中信息显示楼层一共只有1、2、3、地下的总价较高。
探究Decorate与TotalPrice的关系
ggplot(DATA,aes(x=Decorate,y=TotalPrice))+geom_boxplot(col=”red”)\n
不同装修信息对总价影响较小。
模型建立
fit<-lm(TotalPrice~Bedrooms+Halls+Toilet+Area+Towards+Floor+Decorate,data=DATA)\nsummary(fit)\nCall:\nlm(formula=TotalPrice~Bedrooms+Halls+Toilet+Area+\nTowards+Floor+Decorate,data=DATA)\nResiduals:\nMin1QMedian3QMax\n-1330.80-103.49-21.4163.882961.59\nCoefficients:\nEstimateStd.ErrortvaluePr(>|t|)\n(Intercept)-112.763388.3010-1.2770.201697\nBedrooms2-43.593416.2533-2.6820.007359**\nBedrooms3-82.656520.7641-3.9817.04e-05***\nBedrooms4-63.309634.9521-1.8110.070198.\nBedrooms579.061854.07631.4620.143842\nHalls1-5.066364.2764-0.0790.937182\nHalls2-53.890565.4427-0.8230.410307\nHalls3-303.975079.2280-3.8370.000127***\nHalls4-528.5427104.0849-5.0784.07e-07***\nToilet2112.956619.11715.9093.87e-09***\nToilet3543.730438.805614.012<2e-16***\nToilet4735.189455.097713.343<2e-16***\nToilet5338.790684.28514.0205.98e-05***\nArea5.10910.161931.557<2e-16***\nTowards东北向138.908879.38171.7500.080248.\nTowards东南向187.189568.53882.7310.006351**\nTowards东西向176.305565.83842.6780.007453**\nTowards东向210.943573.27442.8790.004022**\nTowards南北向75.783157.11991.3270.184704\nTowards南向60.194956.96781.0570.290763\nTowards西北向75.432671.14151.0600.289091\nTowards西南向169.810675.96262.2350.025467*\nTowards西向234.081676.55853.0580.002253**\nFloor地下-812.357863.3277-12.828<2e-16***\nFloor高层12.352514.24660.8670.385991\nFloor共1层-313.727852.1342-6.0182.00e-09***\nFloor共2层-453.369241.6829-10.877<2e-16***\nFloor共3层-601.703244.3336-13.572<2e-16***\nFloor共4层-183.786636.3396-5.0574.52e-07***\nFloor共5层-41.418425.7922-1.6060.108419\nFloor中层-1.722313.5961-0.1270.899204\nDecorate简单装修-63.159122.0584-2.8630.004224**\nDecorate精装修-49.327619.8544-2.4840.013033*\nDecorate毛坯-157.029924.3012-6.4621.22e-10***\n—\nSignif.codes:0‘***’0.001‘**’0.01‘*’0.05‘.’0.1‘’1\nResidualstandarderror:265.5on2794degreesoffreedom\nMultipleR-squared:0.6852,AdjustedR-squared:0.6815\nF-statistic:184.3on33and2794DF,p-value:<2.2e-16\n
模型的F检验拒绝原假设,说明建立的模型是显著的;AjustedR-squared为0.6815,模型的拟合程度尚可接受。
关于房产网站源码分享程序到此分享完毕,希望能帮助到您。
