动态爬取链家二手房成交记录并保存至Excel

本文介绍了如何动态爬取链家二手房成交记录,并将其保存至Excel文件。首先分析网页结构,找到成交记录的链接和翻页规律。接着通过Python实现爬虫,包括获取BS对象、链接列表、信息、检查ID、获取属性标签和下载数据等功能。最后,讨论了爬取过程中可能出现的问题和解决方案。
摘要由CSDN通过智能技术生成

 

一、先观察网页结构

链家成交记录网址:https://bj.lianjia.com/chengjiao/

每页有30条成交记录,点击记录提示要下载APP才能查看详细信息。不管它,我们直接审查元素,找到成交记录的链接,点击打开。如下图

                                     https://bj.lianjia.com/chengjiao/101103150758.html

链接后面有一串数字,应该是这个成交记录的id号,由于记录每日更新,我们每次爬取完成之后用一个txt文本保存最新记录的id号,以便下次准确定位爬取结束的位置。

接下来回到成交记录页面,观察其翻页时网址的变化:

https://bj.lianjia.com/chengjiao/pg2/

https://bj.lianjia.com/chengjiao/pg3/

地址后加上:/pg+页数 就可以翻页了。

然后在详细信息页面观察要爬取的内容,如图:

包括基本属性、交易属性、成交额、成交单价和成交日期,全部爬取。

接下来老规矩,审查元素,找到这些内容所在的标签:

标签位置已经清楚,说一下爬取的基本思路:

先获取30个记录的链接,然后依次爬取信息,最后打开下一页,循环往复。

这是为了在第一次爬取的时候(有100页),一旦出现异常,可以将已爬取的先保存。

二、代码解析

需要的包有numpy,pandas,BeautifulSoup,re,urllib等

代码解析如下:

1、getbsobj函数

def getbsobj(url):
    try:
        html = urlopen(url,timeout=3)
    except (HTTPError,socket.timeout):
        return None
    return BeautifulSoup(html,'html.parser')

定义一个返回bs对象的函数,包括一些异常处理。

2、getLinksList函数

def getLinksList(url,n):
    '''

    :param url: 链接
    :param n: 第n页
    :return: 链接列表
    '''
    ls = []
    bs
要实现Python爬取链家二手房数据可视化,可以按照以下步骤进行操作: 1. 使用Scrapy框架进行分布式爬取链家二手房数据。Scrapy是一个强大的Python爬虫框架,可以帮助我们快速高效地爬取数据。可以使用Scrapy编写爬虫程序,设置爬取的起始URL和相关的爬取规则,然后通过分布式爬取多个页面的数据。 2. 将爬取到的数据存储到MySQL数据库中。可以使用Python的MySQL库连接到MySQL数据库,并将爬取到的数据存储到数据库中。可以创建一个表来存储二手房的相关信息,例如房源名称、价格、面积等。 3. 使用pandas进行数据清洗和分析。pandas是一个强大的数据处理和分析库,可以帮助我们对爬取到的数据进行清洗和分析。可以使用pandas读取MySQL数据库中的数据,并进行数据清洗、处理和分析,例如去除重复数据、处理缺失值、计算统计指标等。 4. 使用可视化库进行数据可视化。Python有很多强大的可视化库,例如matplotlib、seaborn和plotly等。可以使用这些库来绘制各种图表,例如柱状图、折线图、散点图等,以展示二手房数据的分布、趋势和关联性。 以下是一个示例代码,演示了如何使用Scrapy爬取链家二手房数据,并使用pandas和matplotlib进行数据清洗和可视化: ```python import scrapy import pandas as pd import matplotlib.pyplot as plt class LianjiaSpider(scrapy.Spider): name = 'lianjia' start_urls = ['https://www.lianjia.com/ershoufang/'] def parse(self, response): # 解析页面数据,提取二手房信息 # ... # 将数据存储到MySQL数据库中 # ... yield item # 使用命令行运行爬虫 # scrapy crawl lianjia # 从MySQL数据库读取数据 data = pd.read_sql('SELECT * FROM lianjia', 'mysql://username:password@localhost/lianjia') # 数据清洗和分析 # ... # 绘制柱状图 plt.bar(data['区域'], data['价格']) plt.xlabel('区域') plt.ylabel('价格') plt.title('链家二手房价格分布') plt.show() ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值