当前位置:   article > 正文

用Python分析上海的楼盘信息并进行数据可视化_pyecharts楼盘卖点展示

pyecharts楼盘卖点展示


在这里插入图片描述

前言

  好久不写爬虫了,深夜想买房 不~我不想。
我就是去看了一下上海的新楼盘信息,明白一个道理…“现在我买不起(╬ ̄皿 ̄)”!
算了算了。。。

运行结果

先看一下运行后的效果,有兴趣再往下看~
在这里插入图片描述

分析网页拿到数据

目标网址:https://sh.newhouse.fang.com/house/s/b91/?ctm=1.sh.xf_search.page.1
如下所示,我们需要拿到每个楼盘的name和价格
在这里插入图片描述
本来想像下面那样用查找请求的数据文件获取数据的
在这里插入图片描述
  懒得找了,利用HTML解析库lxml结合xPath语法(xPath教程)很方便就拿到网页上的数据了
如下,.//div[@class=“nlcd_name”]/a/text() 可拿到当前网页上所有楼盘的name
在这里插入图片描述
.//div[@class=“nhouse_price”]/span/text() 可拿到当前网页上所有的楼盘价格
在这里插入图片描述
  通过两个xPath语法即可拿到需要的数据,将两类数据分别保存在两个列表中,为后面数据可视化做准备(分别作为提供横、纵坐标的数据)

# .//div[@class="nlcd_name"]/a/text()拿到的是所有的数据,strip()切割后用循环来遍历每次取第一个
name = xpath('.//div[@class="nlcd_name"]/a/text()')[0].strip()
names.append(name) #将name添加至names数组中
price = i.xpath('.//div[@class="nhouse_price"]/span/text()')[0]
prices.append(price)
  • 1
  • 2
  • 3
  • 4
  • 5

得到names[]和prices[]两个列表数据后,使用pyecharts来绘制柱状图

from pyecharts.charts import Bar    # pip install pyecharts

bar = Bar()     # Bar:柱状
bar.add_xaxis(names)
bar.add_yaxis('房价信息(元/平方米)',prices)
bar.render('D:\python_data\数据可视化\\fangJia.html')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  运行成功会在 D:\python_data\数据可视化 目录下生成一个fangJia.html文件,它就是数据可视化得到的柱状图

源码

  代码中的注释都是我的分析思路和想法,有需要而且和我一个脑筋的小伙伴可以试着看下

import requests
from lxml import etree

url = 'https://sh.newhouse.fang.com/house/s/b91/?ctm=1.sh.xf_search.page.1'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

resp = requests.get(url,headers=headers)
# print(resp) # <Response [200]>

resp_text = resp.content.decode(encoding='gbk')
# print(resp_text)

resp_html = etree.HTML(resp_text)

rep_lisp = resp_html.xpath('//*[@id="newhouse_loupai_list"]/ul/li')
# print(rep_lisp)     # [<Element li at 0x17629a61288>, <Element li a......
# print(type(rep_lisp))   # <class 'list'>

names = []
prices = []
for i in rep_lisp:
    if i.xpath('.//div[@class="nlcd_name"]/a/text()') != []:
        print(i.xpath('.//div[@class="nlcd_name"]/a/text()'))    # ['\n\t\t\t\t\t\t\t\t\t\t万科西郊都会 \t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t']  ['\n\t\t\t\t\t\t\t\t\t\t万科青藤公园 \t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t']...
        name = i.xpath('.//div[@class="nlcd_name"]/a/text()')[0].strip()
        # print(name)     # 万科西郊都会 万科青藤公园 新城虹口金茂府...
        # print(type(name))   #<class 'str'>
        names.append(name)
    if i.xpath('.//div[@class="nhouse_price"]/span/text()') != []:  #  and i.xpath('.//div[@class="nhouse_price"]/span/text()') != ['价格待定']
        price = i.xpath('.//div[@class="nhouse_price"]/span/text()')[0]
        # print(price)    # 331 46000.....
        # print(type(price))  # <class 'str'>
        prices.append(price)
print(names)    # ['万科西郊都会', '万科青藤公园', '新城虹口金茂府', '城开御瑄', '四季都会', '外滩豪...
print(prices)   # ['331', '46000', '122400', '110000', '350', '价格待定', '52

# 可视化
from pyecharts.charts import Bar    # pip install pyecharts

bar = Bar()     # Bar:柱状
bar.add_xaxis(names)
bar.add_yaxis('房价信息(元/平方米)',prices)
bar.render('D:\python_data\数据可视化\\fangJia.html')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

  至此,就完了,也快凌晨一点了。这里只是爬取了第一页的数据来做可视化,需要拿到更多数据的可以在最外层再加一个循环,请求地址(url)做一下拼接就可以控制爬取数据的页数了

编程之外

做一件事不坚持怎么可能看到收获呢!
  我这里分析网页时,在浏览器上方用于输入Xpath语法,来获取网页数据的那个黑框,是Chrome的一个扩展程序XPath Helper
。需要这个扩展程序的,可以在我的公众号回复 扩展程序 免费获取,欢迎小伙伴入坑,一起成长哦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/205019
推荐阅读
相关标签