python爬虫爬取武汉房价信息

Python有一个大作业,老师说想不到的可以试试爬武汉房价,反正想不到,那就爬一下喽。

我爬了网上武汉的房价信息,有帮助的可以看看下。

有一些小Bug,但是大体还是不打紧的,可以用。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#Time : 2022-11-11
#Actor: WeiLihong
#Contents: The main solution is web crawler and visual display

import requests
import bs4
import pandas as pd
import numpy as np
import time
import matplotlib.pyplot as plt
import xlwt

#解决乱码问题,显示中文标签
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.rcParams['axes.unicode_minus']=False

#获取价格函数
def get_price(html):
    price_buf = []
    soup = bs4.BeautifulSoup(html.content, 'html.parser')
    for div in soup.find_all(attrs={'class':'nhouse_price'}):
        price = div.span.string
        
        #将待定的元素改为0
        if price == '价格待定':
            price = int(0)

        price = int(price)
        price_buf.append(price)
    return price_buf

#获取地点函数
def get_addr(html):
    addr_buf = []
    soup = bs4.BeautifulSoup(html.content, 'html.parser')
    for div in soup.find_all(attrs={'class':'nlc_details'}):
        addr_f = div.a.string
        
        #去除‘\n’'\t',获取地址
        addr_a = list(addr_f)
        addr_b = addr_a[12:-7]
        #print (addr_b)
        
        #合并列表中的各元素组成地名
        addr = ''.join(addr_b)
        
        addr_buf.append(addr)
    return addr_buf

#保存数据到EXCEL函数
def save_excel(all_price, all_addr):
    # 创建工作workbook
    workbook = xlwt.Workbook()
    
    # 创建工作表worksheet,填入表名
    worksheet = workbook.add_sheet('Wuhan_House_Price_Table')

    # 在表中写入相应的数据
    worksheet.write(0, 0, '地点')
    worksheet.write(0, 1, '价格')
    for i in range(len(all_price)):
        worksheet.write(1+i, 0, all_addr[i])
        worksheet.write(1+i, 1, all_price[i])
        
    # 保存表
    workbook.save('F:\course\python\science\Wuhan_housing_price_Trend.xls')
    print('数据存入EXCEL成功!')
    

def picture1(all_price, all_addr):
    # 创建数据
    df = pd.DataFrame({'x_axis': all_addr, 'y_axis': all_price})

    #设置标题
    plt.title("Wuhan housing price Trend", fontsize=24)

    #X轴Y轴添加标签
    plt.xlabel("Address(Wuhan)", fontsize=14)
    plt.ylabel("Price(元/m3)", fontsize=14)

    #设置每个坐标轴的取值范围(min,max)
    plt.ylim(0,60000)

    #横坐标标签竖着显示
    plt.xticks(rotation = -90,size = 5)

    #设置刻度标记的大小,设置刻度的样式
    plt.tick_params(axis='both', labelsize=10)
    #plt.tick_params(labelsize=13)  #刻度字体大小13

    #设置位置,方便看的
    plt.subplots_adjust(left=0.095, bottom=0.3, right=0.96, top=0.93)

    # 绘制显示
    plt.plot('x_axis', 'y_axis', data=df, linestyle='-', marker='o',color='b')
    plt.show()


def picture2(all_price, all_addr):
    x_data = all_addr;
    y_data = all_price;

    # 画图,plt.bar()可以画柱状图
    for i in range(len(x_data)):
        plt.bar(x_data[i], y_data[i])

    # 设置x轴标签名
    plt.xlabel("地点")
    #设置刻度标记的大小,设置刻度的样式
    plt.xticks(rotation = -90,size = 10)
    #设置位置,方便看的
    plt.subplots_adjust(left=0.05, bottom=0.297, right=0.962, top=0.95)
    # 设置y轴标签名
    plt.ylabel("价格")
    # 显示
    plt.show()
    
    
    
#主函数开始
url = ("https://wuhan.newhouse.fang.com/house/s/b9")
all_price = []
all_addr = []


for i in range(1,5):
    
    html = requests.get(url + str(i) + '/')
    html.raise_for_status()
    html.encoding = 'utf-8'
    
    page_price = get_price(html)
    all_price.extend(page_price)
    
    page_addr = get_addr(html)
    all_addr.extend(page_addr)
    
    #time.sleep(1)
    print("第{}页处理完成".format(i))

print("网页采集完成,开始写入文件,生成可视化图表")

#保存数据
save_excel(all_price, all_addr)

#显示图1
picture1(all_price, all_addr)

#显示图2
picture2(all_price, all_addr)

都有备注,看不懂的问就可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值