zoukankan      html  css  js  c++  java
  • 爬取房价信息并制作成柱状图XPath,pyecharts

    以长沙楼盘为例,看一下它的房价情况如何url = https://cs.newhouse.fang.com/house/s/b91/

    一、页面

    二、分析页面源代码

    我们要获得的数据就是名字和价格,先来分析一下源代码,鼠标右键Inspect,并且打开xpath,第一步,找到需要提取数据的区域,选中定位到代码相应位置,然后右击copy xpath到xpath里面去,可以发现插件中右侧results有一个,就是下面那片黄色的区域,即我们要提取的数据。

    好了,网页部分已经了解了,那么接下来就是用代码抓取数据了。

    三、代码实现

    成果图:

    play.py

    #!/usr/bin/env python
    # _*_ coding: UTF-8 _*_
    """=================================================
    @Project -> File    : Operate_system_ModeView_structure -> play.py
    @IDE     : PyCharm
    @Author  : zihan
    @Date    : 2020/5/6 14:59
    @Desc    :
    ================================================="""
    import requests
    from lxml import etree
    from pyecharts.charts import Bar
    import pyecharts.options as opts
    
    
    def getData():
        url = "https://cs.newhouse.fang.com/house/s/b91/"
        headers = {
            'User-Agent': ""
        }
        response = requests.get(url, headers=headers)  # 发送请求
        data= response.content.decode(encoding='gbk')
        html = etree.HTML(data)
    
        house_list = html.xpath('//div[@class="nl_con clearfix"]/ul/li')
    
        names = []
        prices = []
        for i in house_list:
            name = i.xpath('.//div[@class="nlcd_name"]/a/text()')
            price = i.xpath('.//div[@class="nhouse_price"]/span/text()')
    
            if name != [] and price != []:
                if price != ['价格待定']:
                    name = name[0].strip()
                    names.append(name)
                    price = price[0]
                    prices.append(price)
        return names, prices
    
    
    def main():
        print("main() func is starting...")
        names, prices = getData()
        # print(names)
        # print(prices)
        bar = Bar()
        bar.add_xaxis(names)
        bar.add_yaxis('长沙房价图', prices)
        bar.set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    axislabel_opts=opts.LabelOpts(rotate=40),
                ),
            yaxis_opts=opts.AxisOpts(name="价格(元、平方米)"),
            title_opts=opts.TitleOpts(title="柱状图")
        )
        bar.render('房价图.html')
    
    
    if __name__ == '__main__':
        main()

    好了。

  • 相关阅读:
    转载:QTableView中嵌入可视化组件
    pyqt声音输入
    pyqt二进制和图片的转换
    LeetCode(92):反转链表 II
    LeetCode(91):解码方法
    LeetCode(90):子集 II
    LeetCode(89):格雷编码
    LeetCode(88):合并两个有序数组
    LeetCode(87):扰乱字符串
    LeetCode(86):分隔链表
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/12838340.html
Copyright © 2011-2022 走看看