iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现爬取房源信息的示例详解
  • 197
分享到

Python实现爬取房源信息的示例详解

2024-04-02 19:04:59 197人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录前言分析页面,寻找切入点爬取数据整理数据,导出文件前言 最近由于工作突然变动,新的办公地点离现在的住处很远,必须要换房子租了。 我坐上中介的小电驴,开始探索城市各处的陌生角落。

前言

最近由于工作突然变动,新的办公地点离现在的住处很远,必须要换房子租了。

我坐上中介的小电驴,开始探索城市各处的陌生角落。

在各个租房app之间周转的过程中,我属实有些焦头烂额,因为效率真的很低下:

首先,因为跟女友住在一起,需要同时考虑两人的上班路程,但各平台按通勤时长找房的功能都比较鸡肋,有的平台不支持同时选择多个地点,有的平台只能机械的取到离各个地点通勤时长相同的点,满足不了使用需求。

其次,站在一个租房人的立场,租房平台实在太多了,并且各平台筛选和排序逻辑都不太一致,导致很难将相似房源的信息进行横向比较。

但是没有关系,作为一名程序员,当然要用程序员的方法来解决问题了。于是,昨晚我用一个python脚本,获取了某租房平台上海地区的所有房源信息,一共2w多条:

下面就把本次爬数据的整个过程分享给大家。

分析页面,寻找切入点

首先进入该平台的租房页面,可以看到,主页上的房源列表里已经包括了我们所需要的大部分信息,并且这些信息都能直接从dom中获取到,因此考虑直接通过模拟请求来收集网页数据。

因此接下来就要考虑怎么获取url了。通过观察我们发现,该地区一共有2w套以上的房源,而通过网页只能访问到前100页的数据,每页显示数量上限是30条,算下来就是一共3k条,无法获取到全部信息。

不过我们可以通过添加筛选条件来解决这个问题。在筛选项中选择“静安”,进入到如下的url:

https://sh.lianjia.com/zufang/jingan/

可以看到该地区一共有2k多套房源,数据页数为75,每页30条,理论上可以访问到所有的数据。所以可以通过分别获取各区房源数据的方法,得到该市所有的数据。

Https://sh.lianjia.com/zufang/jingan/pg2/

点击第二页按钮后,进入到了上面的url,可以发现只要修改pg后面的数字,就能进入到对应的页数。

不过这里发现一个问题,相同的页数每次访问得到的数据是不一样的,这样会导致收集到的数据出现重复。所以我们点击排序条件中的“最新上架",进入到如下链接:

https://sh.lianjia.com/zufang/jingan/pg2rco11/

用这种排序方式获得的数据次序是稳定的,至此我们的思路便有了:首先分别访问每个小地区的第一页,然后通过第一页获取当前地区的最大页数,然后访问模拟请求访问每一页获取所有数据。

爬取数据

有了思路之后就要动手写代码了,首先我们要收集包含所有的链接,代码如下:

# 所有小地区对应的标识
list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu']
# 存放所有链接
urls = []
for a in list:
    urls.append('https://sh.lianjia.com/zufang/{}/pg1rco11/'.fORMat(a))
    # 设置请求头,避免ip被ban
    headers = {'User-Agent': 'Mozilla/5.0 (windows NT 10.0; WOW64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}
    # 获取当前小地区第1页的dom信息
    res = requests.get('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a), headers=headers)
    content = res.text
    soup = BeautifulSoup(content, 'html.parser')
    # 获取当前页面的最大页数
    page_num = int(soup.find('div', attrs={'class': 'content__pg'}).attrs['data-totalpage'])
    for i in range(2,page_num+1):
        # 将所有链接保存到urls中
        urls.append('https://sh.lianjia.com/zufang/{}/pg{}rco11/'.format(a,i))

之后,我们要逐一处理上一步得到的urls,获取链接内的数据,代码如下:

num=1
for url in urls:
    print("正在处理第{}页数据...".format(str(num)))
    res1 = requests.get(url, headers=headers)
    content1 = res1.text
    soup1 = BeautifulSoup(content1, 'html.parser')
    infos = soup1.find('div', {'class': 'content__list'}).find_all('div', {'class': 'content__list--item'})

整理数据,导出文件

通过对页面结构的观察,我们能得到每个元素存储的位置,找到对应的页面元素,就能获取到我们需要的信息了。

这里附上完整的代码,感兴趣的朋友可以根据自己的需要,替换掉链接中的地区标识和小地区的标识,就能够获取到自己所在地区的信息了。其他租房平台的爬取方式大都类似,就不再赘述了。

import time, re, csv, requests
import codecs
from bs4 import BeautifulSoup

print("****处理开始****")
with open(r'..\sh.csv', 'wb+')as fp:
    fp.write(codecs.BOM_UTF8)
f = open(r'..\sh.csv','w+',newline='', encoding='utf-8')
writer = csv.writer(f)
urls = []

# 所有小地区对应的标识
list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu']
# 存放所有链接
urls = []
for a in list:
    urls.append('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a))
    # 设置请求头,避免ip被ban
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}
    # 获取当前小地区第1页的dom信息
    res = requests.get('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a), headers=headers)
    content = res.text
    soup = BeautifulSoup(content, 'html.parser')
    # 获取当前页面的最大页数
    page_num = int(soup.find('div', attrs={'class': 'content__pg'}).attrs['data-totalpage'])
    for i in range(2,page_num+1):
        # 将所有链接保存到urls中
        urls.append('https://sh.lianjia.com/zufang/{}/pg{}rco11/'.format(a,i))

num=1
for url in urls:
    # 模拟请求
    print("正在处理第{}页数据...".format(str(num)))
    res1 = requests.get(url, headers=headers)
    content1 = res1.text
    soup1 = BeautifulSoup(content1, 'html.parser')
    # 读取页面中数据
    infos = soup1.find('div', {'class': 'content__list'}).find_all('div', {'class': 'content__list--item'})

    # 数据处理
    for info in infos:
        house_url = 'https://sh.lianjia.com' + info.a['href']
        title = info.find('p', {'class': 'content__list--item--title'}).find('a').get_text().strip()
        group = title.split()[0][3:]
        price = info.find('span', {'class': 'content__list--item-price'}).get_text()
        tag = info.find('p', {'class': 'content__list--item--bottom oneline'}).get_text()
        mixed = info.find('p', {'class': 'content__list--item--des'}).get_text()
        mix = re.split(r'/', mixed)
        address = mix[0].strip()
        area = mix[1].strip()
        door_orientation = mix[2].strip()
        style = mix[-1].strip()
        region = re.split(r'-', address)[0]
        writer.writerow((house_url, title, group, price, area, address, door_orientation, style, tag, region))
        time.sleep(0)
    print("第{}页数据处理完毕,共{}条数据。".format(str(num), len(infos)))
    num+=1

f.close()
print("****全部完成****")

经过一番操作,我们获取到了当地各租房平台完整的房源信息。至此,我们已经可以通过一些基本的筛选方式,获取自己需要的数据了。

到此这篇关于Python实现爬取房源信息的示例详解的文章就介绍到这了,更多相关Python爬取房源信息内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python实现爬取房源信息的示例详解

本文链接: https://www.lsjlt.com/news/120447.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现爬取房源信息的示例详解
    目录前言分析页面,寻找切入点爬取数据整理数据,导出文件前言 最近由于工作突然变动,新的办公地点离现在的住处很远,必须要换房子租了。 我坐上中介的小电驴,开始探索城市各处的陌生角落。 ...
    99+
    2024-04-02
  • Python爬取城市租房信息实战分享
    目录一、单线程爬虫二、优化为多线程爬虫三、使用asyncio进一步优化四、存入Mysql数据库(一)建表(二)将数据存入数据库中 五、最终效果图 (已打码)思路:先单线程爬...
    99+
    2024-04-02
  • python爬取全国水雨情信息详解
    目录分析代码结果总结 分析 我们没有找到接口,所以打算利用selenium来爬取。 代码 import datetime import pandas as pd from bs4...
    99+
    2024-04-02
  • 基于Python实现最新房价信息的获取
    整个数据获取的信息是通过房源平台获取的,通过下载网页元素并进行数据提取分析完成整个过程 导入相关的网页下载、数据解析、数据处理库 from fake_useragent impor...
    99+
    2024-04-02
  • 用Python实现爬取百度热搜信息
    目录前言库函数准备数据爬取网页爬取数据解析数据保存总结前言 何为爬虫,其实就是利用计算机模拟人对网页的操作 例如 模拟人类浏览购物网站 使用爬虫前一定要看目标网站可刑不可刑 :-) ...
    99+
    2024-04-02
  • Python使用爬虫爬取贵阳房价的方法详解
    目录1序言1.1生存压力带来的哲思1.2 买房&房奴2爬虫 2.1基本概念2.2 爬虫的基本流程 3爬取贵阳房价并写入表格3.1结果展...
    99+
    2024-04-02
  • Python 基于Selenium实现动态网页信息的爬取
    目录一、Selenium介绍与配置1.Selenium简介2. Selenium+Python环境配置二、网页自动化测试1.启动浏览器并打开百度搜索2.定位元素三、爬取动态网页的名人...
    99+
    2024-04-02
  • Python实现爬取腾讯招聘网岗位信息
    目录介绍效果展示实现思路源码展示介绍 开发环境 Windows 10 python3.6 开发工具 pycharm 库 numpy、matplotlib、time、xlutils.c...
    99+
    2024-04-02
  • 怎么用Python实现爬取百度热搜信息
    小编给大家分享一下怎么用Python实现爬取百度热搜信息,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言何为爬虫,其实就是利用计算机模拟人对网页的操作例如 模拟人类浏览购物网站使用爬虫前一定要看目标网站可刑不可刑 :-)...
    99+
    2023-06-26
  • Python爬取租房数据实例是怎么样的
    这篇文章给大家介绍Python爬取租房数据实例是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、什么叫爬虫爬虫,又名“网络爬虫”,就是能够自动访问互联网并将网站内容下载下来的程序。它也是搜索引擎的基础,像百度...
    99+
    2023-06-04
  • Python PaddleNLP开源实现快递单信息抽取
    目录前言5 条标注数据,搞定物流快递单信息抽取智能立体库盘点前言 近几年,制造业作为国民经济主体,是国家创造力、竞争力和综合国力的重要体现。作为制造强国建设的主攻方向,可以说,智能制...
    99+
    2024-04-02
  • Python实现UDP与TCP通信的示例详解
    目录1. UDP2. TCP1. UDP UDP是一种无连接的、不可靠的传输协议,相比于TCP,UDP具有数据传输速度快、传输延迟小等优点,但是不保证数据的可靠传输,需要应用层进行数...
    99+
    2023-03-23
    Python UDP TCP通信 Python UDP TCP Python UDP Python TCP
  • PyQt5爬取12306车票信息程序的实现
    目录1、搭载QT环境2、主窗体设置3、下载网站文件4、车票信息的请求与显示5、在主窗体中显示查票信息1、搭载QT环境 按win+R输入 pip install pyqt5 下载QT5...
    99+
    2024-04-02
  • Python实现计算信息熵的示例代码
    目录一:数据集准备二:信息熵计算三:完整源码分享一:数据集准备 如博主使用的是: 多层感知机(MLP)实现考勤预测二分类任务(sklearn)对应数据集 导入至工程下 二:信息熵计...
    99+
    2022-12-26
    Python计算信息熵 Python 信息熵
  • Python基于Selenium怎么实现动态网页信息的爬取
    这篇文章主要介绍“Python基于Selenium怎么实现动态网页信息的爬取”,在日常操作中,相信很多人在Python基于Selenium怎么实现动态网页信息的爬取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-22
  • py3nvml实现GPU相关信息读取的示例分析
    py3nvml实现GPU相关信息读取的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一...
    99+
    2023-06-26
  • node.js实现简单爬虫示例详解
    目录node.js实现简单爬虫第一步第二步爬虫结果小结:node.js实现简单爬虫 工具:cheerio cheerio 是 nodejs 特别为服务端定制的,能够快速灵活的对 JQ...
    99+
    2023-05-17
    node.js简单爬虫 node.js爬虫
  • C#实现给图片添加日期信息的示例详解
    实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2022-12-09
    C#图片添加日期信息 C#图片添加信息 C# 添加信息
  • JavaScript获取上传文件相关信息示例详解
    目录前题场景处理方式图片文件音频文件判断处理分析总结前题场景 在开发过程中,文件上传是再熟悉不过的场景了,但是根据实际使用情况对上传文件的限制又各有不同。需要对本地上传文件进行相应的...
    99+
    2024-04-02
  • Python爬虫实现抓取电影网站信息并入库
    目录一.环境搭建1.下载安装包2.修改环境变量3.安装依赖模块二.代码开发三.运行测试1.新建电影信息表2.代码运行四.问题排查和修复1.空白字符报错2.请求报错一.环境搭建 1.下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作