BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析

Posted chenyusheng0803

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析相关的知识,希望对你有一定的参考价值。

因为最近要买房子,然后对房市做了一些调研,发现套路极多。卖房子的顾问目前基本都是一派胡言能忽悠就忽悠,所以基本他们的话是不能信的。一个楼盘一次开盘基本上都是200-300套房子,数据量虽然不大,但是其实看一下也很烦要一页一页的翻,如果是在纸上的话,他们还不让你给带回去。所以就是在选一个价格楼层也合适的房子,基本上很不方便。但是幸运的是,合肥市的房子的所有的价格都在合肥是物价局上面公示出来了。所以这里考虑的就是先把房子的价格数据都给爬下来,然后分析房子的单价,总价来选个觉得最适合自己的房源。

 

这里涉及的技术点是这样

1. 发出post指令传入参数,获取url不变的分页网络信息

2. 解析网页的结构,用bs4去抓取自己需要的内容

3. 综合1,2两点编写完整的脚本代码,讲自己需要的房源的信息给爬取下来

4. pandas的对于dataframe的操作,选出适合自己的房子。

 

下面是操作步骤:

这里是我们要爬取的页面

技术分享图片

一共是15个分页,但是每个分页点进去的时候,url是没有变化的,也就是说我们没办法直接的通过更改url来访问页面。

技术分享图片

打开Network,参数在这里,把他们用post请求发进去,就可以翻页了。

这时候我们需要找到我们需要爬取的数据的信息,看下网页的element,来定位到我们的数据信息

技术分享图片

好像都在这里

那这个里面的子节点呢

技术分享图片

大概是这个样子。

下面是我写的爬虫:

# import libraray
import requests
import os
import pandas as pd
import re
from lxml import etree
from bs4 import BeautifulSoup

# source url
url2 = "http://app.hfpi.gov.cn/fangjia/ws/Detail2.aspx?Id=5421"
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/68.0.3440.106 Safari/537.36"}

# 每次都更新下参数
def update_data_dict(soup):
    data_dict[__VIEWSTATE] = soup.find(id=__VIEWSTATE)[value]
    data_dict[__EVENTTARGET] = AspNetPager1
    data_dict[__EVENTARGUMENT] += 1

#保存下来爬取的当页的数据
def save_data(soup):
    x = soup(table,width=97%)
    xx = x[2]
    y = xx(tr)
    
    total = []
    for item in y[1:-1]:
        content1 = item(td)
        empty = ‘‘
        for i in content1:
            if i.find(div) == None:
                continue
            else:
                infopiece = i.find(div).text.strip() +  
                empty += infopiece
        total.append(empty)
    with open(result0.txt,a) as f:
        for senc in total:
            f.write(senc + 
)  

# 接着去下一页继续爬
def get_next_page_data():
    html2 = requests.post(url, data=data_dict).text
    soup2 = BeautifulSoup(html2, lxml)
    update_data_dict(soup2)
    save_data(soup2)

## 现在开始爬取
html_jsy = requests.get(url2).text
soup_jsy = BeautifulSoup(html_jsy,lxml)
save_data(soup_jsy)
update_data_dict(soup_jsy)
# 这里总页数我就设置20,如果后面没有了,也不会继续访问
for i in range(20):
    get_next_page_data_2()

那么我们看下我们爬取的结果

技术分享图片

美滋滋,数据我们拿下来了。

接着我们要开始读取数据开始分析了

import pandas as pd

df = pd.read_csv(result-jsy.txt, sep= ,header=None)

#change column name
df.columns = [BuildingNo,RmNo,Type,Area,ShareArea,RealArea,Price,totalPrice,1,2,3,4]

# 这次开盘只有16还有18, 先把16 18给选出来,然后合并
df_16 = df[df.BuildingNo ==G16]
df_18 = df[df.BuildingNo == G18]
p_list = [df_16,df_18]
df_temp = pd.concat(p_list)

因为这个楼盘有优惠,91折,所以单价我可以接受的范围我设置在14500

df_temp[df_temp.Price <= 14500.0]

技术分享图片

这里,我想住在5楼以上

df_select1[df_select1.RmNo > 500]

技术分享图片

 

好吧,其实筛选就很简单了,这里因为明天就开盘了,所以首要就是看到价格然后楼层尽量高,

这里看,我的首选就是G18-703,但是上面其他的也都可以考虑。

 

以上是关于BS4爬取物价局房产备案价以及dataframe的操作来获取房价的信息分析的主要内容,如果未能解决你的问题,请参考以下文章

使用python3 requests和bs4进行爬虫(二)爬取文章

爬取雪球网上的房产信息

爬取房天下整个网站房产数据。。。

爬虫,基于request,bs4 的简单实例整合

Python爬取房产数据,在地图上展现!

SuperMap 存量房交易网上备案及资金监管管理平台