Python爬虫入门案例之爬取二手房源数据

yizhihongxing

Python爬虫入门案例之爬取二手房源数据

1. 爬虫介绍

在互联网时代,信息非常发达,我们可以从网上获取大量的有价值的信息,比如商品价格、股票走势、人口普查数据等等。这些数据对于学术研究、商业决策等方面都有很多的用处,而爬虫技术可以让我们从网络中提取需要的数据。

简单来说,爬虫技术就是通过程序自动访问网页、获取信息的技术。Python是非常适合爬虫编写的语言,因为Python有很多的爬虫库,而且使用Python编写的爬虫程序很容易理解,代码也很简洁。

2. 爬取二手房源数据步骤

想要爬取二手房源数据,需要先了解一下整个流程,以下是爬取二手房源数据的步骤:

2.1 确定爬取目标

首先需要确定要爬取哪个网站的数据,比如链家二手房网站。在确定网站之后,需要了解一下该网站的网页结构,确定数据的所在位置。

2.2 发送请求并获取HTML

需要使用Python代码向网站发送请求,并获取到该网站的HTML页面。发送请求可以使用requests库,获取HTML可以使用BeautifulSoup库进行网页解析。

import requests
from bs4 import BeautifulSoup

url = 'https://bj.lianjia.com/ershoufang/'       # 网站地址

res = requests.get(url)   # 发送请求
html = res.text   # 获取HTML
soup = BeautifulSoup(html, 'html.parser')   # 网页解析

2.3 解析HTML找到目标数据

在获取到HTML之后,需要使用BeautifulSoup库对HTML进行解析,找到需要的数据所在的位置,通过查看HTML文本中数据的标签和属性,递归查找并选定所需的信息节点。

house_info_list = []   # 存储房源信息的列表

house_list = soup.find_all('li', {'class': 'clear'})   # 定位到所有房源信息所在的标签
for house in house_list:
    title_node = house.find('div', {'class': 'title'})   # 房源标题:名称、户型和面积
    position_node = house.find('div', {'class': 'positionInfo'})   # 位置信息:小区和区域
    price_node = house.find('div', {'class': 'totalPrice'})   # 房屋总价
    unit_node = house.find('div', {'class': 'unitPrice'})   # 单价

    house_info_list.append({
        'title': title_node.text.strip(),
        'community': position_node.a.text.strip(),
        'district': position_node.contents[3].text.strip(),
        'price': float(price_node.span.text.strip()),
        'unit': int(unit_node.contents[0].strip())
    })

2.4 存储数据

爬取到的数据需要进行存储,常用的方式有将数据存储到文件中、存储到数据库中等。这里以将数据存储到CSV文件中为例。

import csv

with open('house_info.csv', 'w', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['标题', '小区', '区域', '总价', '单价'])

    for house in house_info_list:
        row = [house['title'], house['community'], house['district'], house['price'], house['unit']]
        writer.writerow(row)

3. 代码示例1:爬取链家二手房北京市区房源信息

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://bj.lianjia.com/ershoufang/'
res = requests.get(url)
html = res.text
soup = BeautifulSoup(html, 'html.parser')

house_info_list = []

house_list = soup.find_all('li', {'class': 'clear'})
for house in house_list:
    title_node = house.find('div', {'class': 'title'})
    position_node = house.find('div', {'class': 'positionInfo'})
    price_node = house.find('div', {'class': 'totalPrice'})
    unit_node = house.find('div', {'class': 'unitPrice'})

    house_info_list.append({
        'title': title_node.text.strip(),
        'community': position_node.a.text.strip(),
        'district': position_node.contents[3].text.strip(),
        'price': float(price_node.span.text.strip()),
        'unit': int(unit_node.contents[0].strip())
    })

with open('house_info.csv', 'w', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['标题', '小区', '区域', '总价', '单价'])

    for house in house_info_list:
        row = [house['title'], house['community'], house['district'], house['price'], house['unit']]
        writer.writerow(row)

4. 代码示例2:爬取链家二手房城市的所有区县房源信息

import requests
from bs4 import BeautifulSoup
import csv

url = 'https://bj.lianjia.com/ershoufang/'
res = requests.get(url)
html = res.text
soup = BeautifulSoup(html, 'html.parser')

district_info_list = []

district_list = soup.select('div[data-role="ershoufang"] > div:first-of-type > a')
for district in district_list:
    district_name = district.text
    district_url = url + district['href']
    district_res = requests.get(district_url)
    district_html = district_res.text
    district_soup = BeautifulSoup(district_html, 'html.parser')

    house_info_list = []
    house_list = district_soup.find_all('li', {'class': 'clear'})
    for house in house_list:
        title_node = house.find('div', {'class': 'title'})
        position_node = house.find('div', {'class': 'positionInfo'})
        price_node = house.find('div', {'class': 'totalPrice'})
        unit_node = house.find('div', {'class': 'unitPrice'})

        house_info_list.append({
            'title': title_node.text.strip(),
            'community': position_node.a.text.strip(),
            'price': float(price_node.span.text.strip()),
            'unit': int(unit_node.contents[0].strip())
        })

    district_info_list.append({
        'district': district_name,
        'house_info': house_info_list
    })

with open('district_info.csv', 'w', encoding='utf-8-sig', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['区县', '标题', '小区', '总价', '单价'])

    for district_info in district_info_list:
        district = district_info['district']
        house_info_list = district_info['house_info']
        for house in house_info_list:
            row = [district, house['title'], house['community'], house['price'], house['unit']]
            writer.writerow(row)

以上两个示例代码分别实现了爬取链家二手房北京市区房源信息和爬取链家二手房城市的所有区县房源信息。通过以上两个示例可以看出,爬虫程序通过定位HTML标签、解析HTML文本,不仅可以获取单个网页的数据,而且可以自动化地获取多个网页的数据,大大提高了数据爬取的效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫入门案例之爬取二手房源数据 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 网络爬虫(httpwebrequest)驴评网信息为例

    之前写过一篇关于用webBrowser抓取动态网页信息的随笔。正如文中提到的,速度是硬伤,并且如果是非动态信息则不必这么麻烦,最近正好有一需求:抓取“驴评网”上的信息1、所有的州、国家、省、市、区名称2、该市的所有景点信息(该网站中,大部分都是以市级作为最后的支节点,如果是以区作为最终节点的则以区为单位获取相应景点信息)3、该市的所有酒店信息 首先,我们需要…

    爬虫 2023年4月11日
    00
  • 解读Python脚本的常见参数获取和处理方式

    当我们编写Python脚本时,我们通常需要获取一些输入参数以正确地执行我们的代码。Python提供了多种获取参数的方式,下面就是解读Python脚本的常见参数获取和处理方式的完整攻略: 1. 使用sys.argv获取命令行参数 在Python脚本中,我们可以使用sys.argv获取命令行参数。sys.argv是一个字符串列表,它包含了命令行中所有的参数,其中…

    python 2023年6月2日
    00
  • Python API 自动化实战详解(纯代码)

    Python API 自动化实战详解(纯代码)攻略 什么是API自动化? API自动化是指利用API进行自动化测试,提高测试效率和质量。通过代码对API接口进行测试,可以自动化执行多个测试用例,获取接口响应数据,判断和验证接口的正确性和稳定性等。 如何进行Python API自动化? Python是一种广泛应用于Web开发和测试的动态编程语言,有着丰富的AP…

    python 2023年5月19日
    00
  • 详解用python实现简单的遗传算法

    详解用Python实现简单的遗传算法 遗传算法是一种基于自然选择和遗传学原理的优化算法,模拟了生物进化的过程,通过不断地进化和选择,逐步优化问题的解。在Python,可以使用简单的实现遗传算法。本文将详细讲解Python实现遗传算法的过程,并提供两个示例。 遗传算法实现 遗传算法的实现过程可以分为以下几个步骤: 初始化种群:随机生成一组初始解,作为群的第一代…

    python 2023年5月13日
    00
  • Python3中常见配置文件写法汇总

    给你详细讲解一下“Python3中常见配置文件写法汇总”的完整攻略。 配置文件写法汇总 在某些项目中,可能需要使用配置文件来存储一些固定数据,例如数据库连接信息、调试模式的开关等。下面做一个汇总,介绍一下Python3中常见的配置文件写法。 1. INI文件格式写法 INI文件格式是Windows配置文件的标准格式,以[节名]开始,然后接若干行键值对。Pyt…

    python 2023年6月3日
    00
  • Python 错误和异常代码详解

    下面为您详细讲解“Python 错误和异常代码详解”的攻略。 一、Python错误和异常介绍 在编写程序时,经常会遇到错误和异常。遇到错误时程序会停止执行,而异常则是一种可以被处理的错误。Python中内置了许多异常类型,同时我们也可以通过 raise 语句自定义异常。 1.1 异常类型 Python内置的异常类型有很多,比如: IOError(文件读写错误…

    python 2023年5月13日
    00
  • Python socket实现多对多全双工通信的方法

    下面是关于“Python socket实现多对多全双工通信的方法”的完整攻略: 什么是Python Socket? Python Socket是Python标准库中提供支持网络通信的模块。它基于TCP/IP协议族,支持IPV4和IPV6协议,提供了TCP和UDP等两种不同的套接字(socket)实现网络通信。 多对多全双工通信流程 网络通信的模式有很多种,其…

    python 2023年5月19日
    00
  • 通过wireshark获取应用接口并使用爬虫爬取网站数据(三)

    我的git地址唯空自取 源码请上git上下载,包含所需jar包   接上文 浏览一部分图片之后发现了个问题,图片还是太小普遍不超过300k,而且很多图片上面都有另外一个网站的水印 果断点进去看看,果然不一样。图片全是高清的 然后知道了原来那个应用里面的图片全是从这个网站里面爬的,而且还都是压缩过的文件,太无耻了。。。 找到高清图该下手了 于是仿照之前那个模式…

    爬虫 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部