爬取深圳2024年链家二手房数据,共3000条数据(其他城市也可)

在这里插入图片描述

专栏导读

✍ 作者简介:i阿极,优快云 数据分析领域优质创作者,专注于分享python数据分析领域知识。

本文录入于《python网络爬虫实战教学》,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。
订阅后,可以阅读《python网络爬虫实战教学》中全部文章内容,包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
✍ 其他专栏:《数据分析案例》《机器学习案例》

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

1.目标

爬取深圳2024年链家二手房数据,内容有

title,area,community,position,total_price,unit_price,hourseType,hourseSize,direction,fitment
此房满三年,高楼层南向视野无遮挡,毛坯原始户型三房,宝安区,博林君瑞,沙井,420,47033 ,3室2厅,89.3平米,东南,毛坯

数据量为3000条,为数据分析、机器学习、毕设做数据支撑。

2.导入相关库

import csv
from bs4 import BeautifulSoup
import requests

csv 是 Python 的一个标准库,用于读写 CSV(逗号分隔值)文件。CSV 是一种常见的文件格式,用于存储表格数据(如电子表格或数据库)。
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据。它通常与像 lxml 或 html.parser 这样的解析器一起使用。
requests 是一个 Python 库,用于发送 HTTP 请求。它使发送 HTTP 请求(如 GET、POST 等)变得简单。

3.获取每个二手房的链接

for i in range(1,101):
    url = f'https://sz.lianjia.com/ershoufang/pg{i}rs%E6%B7%B1%E5%9C%B3/'
    headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
        }
    data = requests.get(url=url, headers=headers).text
    soup = BeautifulSoup(data,'lxml')
    a_tags = soup.find_all('a', class_='noresultRecommend')
    for a_tag in a_tags:
        href = a_tag.get('href')
        href_list.append(href)

代码解释:

循环遍历页面:通过修改URL中的页码参数(pg{i}),代码循环遍历从第一页到第一百页(包含第一页,不包含第一百零一页)的页面。
模拟浏览器行为:通过设置HTTP请求头中的User-Agent字段,代码模拟了来自一个真实浏览器的请求,以避免被网站识别为爬虫。
发送HTTP GET请求:使用requests.get()方法向每个页面发送HTTP GET请求,并获取响应的文本内容。
解析HTML:使用BeautifulSoup库和’lxml’解析器解析响应的HTML内容,以便进一步提取数据。
查找特定链接:通过调用find_all()方法,代码查找所有具有类名’noresultRecommend’的 < a > 标签(链接)。
存储链接:遍历找到的链接,提取它们的href属性(即链接地址),并将这些地址添加到一个名为href_list的列表中。注意,在实际运行代码之前,需要确保已经定义了href_list列表。

4.获取每个链接中的相关数据

for j in range(len(href_list)):
    try:
        print(href_list[j])
        headers = {
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
                }
        data = requests.get(url=href_list[j], headers=headers).text
        soup = BeautifulSoup(data,'lxml')
        #title
        title_h1 = soup.find('h1',class_='main')
        for titles in title_h1:
            title = titles
        #area
        area_span = soup.find('span',class_='info')
        area_a = area_span.find('a').text


        for position_a in area_span.find_all('a')[-1]:
            position = position_a
        #community
        community = soup.find('a',class_='info').text

        #total_price
        try:
            total_price_div = soup.find('div',class_='price')
            for total_price_span in total_price_div.find('span',class_='total'):
                total_price = total_price_span
        except:
            total_price = None

        # unit_price
        try:
            unit_price_span = soup.find('span',class_='unitPriceValue')
            unit_price = unit_price_span.get_text(strip=True, separator=" ")[:-4]
        except:
            unit_price = None
        #hourseType
        hourseType = soup.find('div',class_='mainInfo').text

        #hourseSize
        hourseSize_div = soup.find('div',class_='area')
        for hourseSize_divs in hourseSize_div.find('div',class_='mainInfo'):
            hourseSize = hourseSize_divs

        #direction
        direction_div = soup.find('div',class_='type')
        for direction_divs in direction_div.find('div',class_='mainInfo'):
            direction = direction_divs
        #fitment
        fitment_div = soup.find('div',class_='type')
        for fitment_divs in fitment_div.find('div',class_='subInfo'):
            fitment = fitment_divs[-2:]

代码解释:

对列表href_list循环,获取列表里的链接,爬取需要的内容:
title,area,community,position,total_price,unit_price,hourseType,hourseSize,direction,fitment
此房满三年,高楼层南向视野无遮挡,毛坯原始户型三房,宝安区,博林君瑞,沙井,420,47033 ,3室2厅,89.3平米,东南,毛坯

5.保存数据

with open('深圳2024年链家二手房信息_1.csv', mode='w', newline='', encoding='utf-8') as csv_file:
    fieldnames = [
        'title', 'area', 'community', 'position', 'total_price',
        'unit_price', 'hourseType', 'hourseSize', 'direction', 'fitment'
    ]
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()

代码解释:

这段代码的主要目的是创建一个新的 CSV 文件(或覆盖现有的同名文件),并写入一个包含多个字段名的表头。这些字段名定义了 CSV 文件中将要包含的列。接下来,你可以使用 writer.writerow(dict_row) 方法来向 CSV 文件中写入包含这些字段的字典数据行。

6.数据展示

在这里插入图片描述

如果需要数据集或源码(每个代码详解)可在博主首页的“资源”下载。
挣点小外快:需要其他城市的数据集可联系博主

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发优快云博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

爬取二手房数据通常需要使用Python编程语言和一些常用的爬虫库,如BeautifulSoup、Requests等。以下是一个基本的步骤指南: 1. **分析网页结构**:首先,需要分析二手房页面的HTML结构,确定需要爬取数据所在的标签和属性。 2. **发送HTTP请求**:使用Requests库发送HTTP请求,获取网页的HTML内容。 3. **解析网页内容**:使用BeautifulSoup库解析HTML内容,提取所需的数据。 4. **数据存储**:将提取的数据存储到本地文件或数据库中。 以下是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup import csv # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } # 发送HTTP请求,获取网页内容 url = 'https://bj.lianjia.com/ershoufang/' response = requests.get(url, headers=headers) html = response.text # 解析网页内容 soup = BeautifulSoup(html, 'html.parser') # 提取二手房信息 houses = soup.find_all('div', class_='info clear') # 存储数据 with open('lianjia_ershoufang.csv', mode='w', newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerow(['标题', '价格', '小区', '位置', '面积', '朝向', '楼层']) for house in houses: title = house.find('div', class_='title').get_text().strip() price = house.find('div', class_='priceInfo').find('span').get_text().strip() community = house.find('div', class_='positionInfo').find('a').get_text().strip() location = house.find('div', class_='positionInfo').get_text().strip().replace(community, '').strip() area = house.find('div', class_='houseInfo').get_text().strip().split('|')[2].strip() orientation = house.find('div', class_='houseInfo').get_text().strip().split('|')[3].strip() floor = house.find('div', class_='houseInfo').get_text().strip().split('|')[1].strip() writer.writerow([title, price, community, location, area, orientation, floor]) print("数据爬取完成") ```
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i阿极

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值