Python:房价爬虫设计

简介: Python:房价爬虫设计

1 需求分析

1.1 设计目的

本次实践使用Python来爬取链家网房价的数据,并对房价进行可视化分析。
客户可以通过精准定位客户找房的需求,可以帮助用户快速找到心仪房源并快速匹配经纪人,为客户提供从咨询、看房、交易及售后等整体流程服务。通过完成此次课程设计,逐渐培养我们的自主编程能力和用计算机解决实际问题的能力。加深了我们对VIP这门课程的理解,并以此来验证自身的学习效果,同时利用我们所学的基本知识和技能,进行简单爬虫应用程序设计提升我们自身学习所获得的成就感。

1.2 设计要求

1.2.1 问题描述

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
(1)用户可以自定义数据采集位置;
(2)方便;
(3)可以储存至本地csv文件。

1.2.2 主要研究功能

1、完成爬虫图形用户界面的设计。
2、完成pyqt界面内的功能模块。
3、完成以csv的形式存至本地。

2 功能分析

2.1网页介绍

链家网是集房源信息搜索、产品研发、大数据处理、服务标准建立为一体的国内领先且重度垂直的全产业链房产服务平台。链家网的前身为链家在线,成立于2010年并于2014年正式更名为链家网。
目前,链家网线上房源已覆盖北京、上海、广州、深圳、天津、成都、青岛、重庆、大连等42个城市。链家网旨在通过不断提高服务效率、提升服务体验,为用户提供更安全、更便捷、更舒心的综合房产服务。
url:https://luoyang.lianjia.com/ershoufang/rs%E5%8C%97%E4%BA%AC/

2.2 用户界面分析

用QApplication([])定义主要界面,用QPushButton添加重新来过按钮,用QProgressBar来添加进度条,用QPlainTextEdit来添加文本框,用QPushButton来获取案件信息,用setPlaceholderText来插入提示,用window.show()来显示图形界面。
定义主界面
app = QApplication([])
window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('链家房源获取器')
textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入你想要查找的地址:")
位置
textEdit.move(10, 25)
textEdit.resize(300, 350)

进度条

ProgressBar=QProgressBar(window)
ProgressBar.setRange(1, 10)

案件信息

button = QPushButton('获取信息', window)
button1 = QPushButton('复制数据', window)

位置

button.move(380, 80)
button1.move(380, 120)

点击事件

button.clicked.connect(main)
button1.clicked.connect(copy)
显示图形界面
window.show()
app.exec_()

3 系统设计与分析

3.1提取数据

3.1.0正则表达式

'infoclear">.*?data-sl="">(.*?)</a>.*?data-el="region">(.*?) </a>.*?target="_blank">(.*?)</a>.*?<span class="houseIcon"></span>(.*?) .*?<span class="">(.*?)</span><i>万'

如图3.1匹配开头与结尾之间的所有字符然后提取

在这里插入图片描述

图3.1

3.1.1 获取所有url

def get_url():
        progress = 0
        for page in range(1, 4):
       base_url = 'https://bj.lianjia.com/ershoufang/pg' + str(page) + 'rs' + str(local) + '/'
      # base_url = 'https://bj.lianjia.com/ershoufang/pg' + str(path+ '/'
        urls.append(base_url)
        progress += 1
        ProgressBar.setValue(progress)

3.1.2保存数据

def write_content(content):
    global q
    with open('y.csv', 'a', encoding='utf-8') as f:
        name = ['地段', '户型', '面积', '价格']
        writer = csv.DictWriter(f, fieldnames=name)
        if q == 0:
            writer.writeheader()
            q += 1
        writer.writerow(content)
        f.close()

3.1.3 整理数据

for item in items:
    # print(item)
    yield {
        '地段': item[0],
        '户型': item[1],
        '面积': item[2],
        '价格': item[3]
    }
# print(\n)

3.1.4 requests批量get超文本数据

def parser_url():
            for url in urls:
            r = requests.get(url, headers=headers)
            r.encoding = 'utf-8'
           # time.sleep(1)
           html = r.text

3.1.5 利用的模块框架

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_modelimport time
import re
import requests
import csv
import json
import sys
from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtCore import QObject, pyqtSignal
import os, string
import math
from PyQt5.QtWidgets import QPlainTextEdit, QMainWindow, QApplication, QMessageBox, QProgressBar
from PyQt5.QtWidgets import QPushButton

3.3数据分析

3.3.1分析二手房的数量
分析津南各个社区二手房的数量,用柱状图表示如图3.3.2,可见双港二手房的数量最多。
在这里插入图片描述

图3.3.1

在这里插入图片描述

图3.3.2

在这里插入图片描述
3.3.2分析房价平米与价格
分析津南平米数与价格的对比,用散点图表示如图3.3.3,可见平米数与价格成正比。

在这里插入图片描述




                            图3.3.3 

3.4线性回归预测房价

我们把通过爬虫采集的观测数据作为训练集,主要有房屋价格与房屋面积,通过线性回归模型来预测房屋价格,通过拿到训练集的min and max,然后在这个范围随机生成数据集作为测试集,以达到泛化最优.

3.4.1 L2正则化

测试之后我们发现模型受异常值影响较为严重,这里通过L2正则进行权重衰减,代码如下:
from sklearn.linear_model import Ridge
def huigui(data_x,data_y):
    plt.figure()
    plt.scatter(data_x,data_y,alpha=0.8)
    plt.show
huigui(data_x,data_y)
model = Ridge(alpha=1000000)  
model.fit(data_x, data_y)   
print('系数矩阵:\n',model.coef_)
# print('线性回归模型:\n',model)
plt.plot(data_x, model.predict(data_x),color='green')
plt.show

总结

通过这次课程设计,我大大提高了自己的自主学习能力,俗话说“师傅领进门,修行在个人”,要完成如此复杂的课程设计,仅靠老师上课教授的知识是远远不够的,需要我们自己去多加学习。在学习中,还应学会提问的方法,遇到问题不要慌张,要仔细往根源去找问题,不要一有问题就寻求老师同学帮忙,要有自主解决问题的能力。通过对代码的不断调试与修改,我们对于语法的理解更为透彻,同时我们的学习态度也得到了锻炼,变得更加严谨求实。通过本项课程设计,我们对于老师在课堂上讲授内容做相应的自主练习,消化课堂所讲解的内容的同时也锻炼了我们的逻辑思维,培养了我们独立思考、综合运用所学有关相应知识的能力。通过完成课题设计,磨练了我们敲代码写编程的意志,同时为我们以后编写更为复杂的程序积累下宝贵的经验,提升自身专业水平和必备技能。

目录
相关文章
|
7天前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
11天前
|
数据采集 数据可视化 算法
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
本文设计并实现了一个基于Python的豆瓣电影TOP250爬虫与可视化系统,通过获取电影评分、评论并应用词云和饼图等可视化技术,为用户提供了电影评价的直观展示和深入分析。
【优秀python案例】基于Python的豆瓣电影TOP250爬虫与可视化设计与实现
|
11天前
|
数据采集 数据可视化 关系型数据库
【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现
本文设计并实现了一个基于Python爬虫的房地产数据可视化分析系统,通过BeautifulSoup框架采集房源信息,使用pandas进行数据处理,MySQL存储数据,并利用pyecharts进行数据可视化,以帮助用户更直观地了解房源信息并辅助选房购房。
|
11天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
11天前
|
数据采集 监控 搜索推荐
基于python的百度资讯爬虫的设计与实现
本文介绍了一个基于Python语言的网络爬虫设计与实现,该爬虫利用urllib.request和BeautifulSoup库从百度新闻中抓取新闻标题、链接、内容摘要和来源信息,通过模拟浏览器行为和添加随机等待时间来规避反爬机制,为新闻数据分析和舆情监控提供支持。
|
11天前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
11天前
|
数据采集 XML 数据可视化
【优秀python案例】基于Python的口红商品的爬虫与可视化的设计与实现
本文介绍了一个基于Python的京东商城口红商品爬虫与可视化系统,通过requests和lxml库抓取商品信息,使用pandas进行数据处理,matplotlib进行数据可视化,分析了口红的价格、评论数(销量)分布以及自营口红品牌的销量和商品种类。
【优秀python案例】基于Python的口红商品的爬虫与可视化的设计与实现
|
8天前
|
数据采集 存储 JSON
Python爬虫
【8月更文挑战第11天】
27 14
|
1天前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
20 6
|
10天前
|
数据采集 前端开发 JavaScript
CSS与Python爬虫
【8月更文挑战第9天】
16 8