python小白一枚~~
互联网从事数据分析行业,最近在努力学习python的爬虫和数据分析模块,在此记录下自己的学习过程和知识笔记,望大家多多提点~

言归正传,今天忽然兴致勃发的想看看北京现在房屋租售的行情,就把贝壳找房中北京的房屋租赁信息爬去下来做了个简单的分析。话不多说,放码过来!

首先先分析需要爬取的URL地址:https://bj.zu.ke.com/zufang/
可以看到,根据不同的浏览页,URL会有页数的变化,并没有其他的动态加载过程,所以这个页面的数据爬取属于比较简单的类型。

第一步:发起http request,并得到response响应

import requests
import re
import json
import csvdef get_one_page(url):url = 'https://bj.zu.ke.com/zufang/pg'+str(i)   #这里url拼接就直接用每一页固定的URL+变动的page页headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0'}  Response = requests.get(url,headers=headers)if Response.status_code == 200: #成功连接  return Response.textelse :print('爬取失败')return None   #这里比较简单,因为估计也不会被拒绝,所以对于3,4,5开头的status我都没写,非200就直接爬取失败~

第二步:分析html的信息,用正则表达式获取需要的数据

个人感觉正则表达式属于一个难点(我写了一个上午。。。),因为暂时还没有掌握xpath和BS4,所以这次的数据提取就用正则做的。
红框中的信息,需要依次用正则提取出来,在这里就先不赘述提取过程了

分享给大家一个很好用的正则方法,就是 [\s\S]*? 这个非贪婪表达式,定位好每一段的开头和结尾字符,对于需要的信息,就用括号把这个非贪婪表达式括起来,作为列表或者字典索引的值,对于不需要的信息,直接写表达式即可。

def parse_one_page(html):pattern = re.compile('<a target="_blank" href="[\S\s]*?">([\S\s]*?)\s+ </a>\s+ </p>\s+<p class="content__list--item--des">[\S\s]*?>([\S\s]*?)</a>-<a[\s\S]*?target="_blank">([\S\s]*?)</a>-<a[\s\S]*?<i>/</i>([\s\S]*?)<i>/</i>([\s\S]*?)<i>/</i>([\S\s]*?)<span[\s\S]*?item-price"><em>([\s\S]*?)</em> ')#括号中的正则表达式就是用上边方法做的,大牛们可以自行定义,正则表达式写法应该还是挺多的~items = re.findall(pattern,html)for it in items:yield{"名称":it[0].strip( ),"城区":it[1].strip( ),"地区":it[2].strip( ),"面积":it[3].strip( ),"朝向":it[4].strip( ),"规格":it[5].strip( ),"价格":it[6].strip( )} #将正则表达式的结果,根据索引位置,用键值对写入字典

第三步:爬取1页信息:
现在我们已经通过正则找到html中的需要的元素了,下面就是爬取页面信息

def craw_one_page(i):url = 'https://bj.zu.ke.com/zufang/pg'+str(i)html = get_one_page(url)for item in parse_one_page(html):write_to_file(item)

这里的i代表需要爬取的页面数量,前文说过,贝壳的url会根据页码有规律的跳转,所以之后我们只要遍历页码就可以把全部信息抓下来。

第四步:保存到本地文件中

def write_to_file(item):with open("贝壳租房.csv","a",encoding="utf=8") as f:f.write(json.dumps(item,ensure_ascii=False)+'\n')f.close()

这一步就是建立csv文件,将爬取内容写入文件操作
但是有个很奇怪的问题,因为是with open ,所以理论上来说,应该不用写f.close(),但是我在执行的时候如果不写,就无法抓取全部的信息,只有一小部分,而且执行后还会报错,所以我就加上了。

第五步:主函数调用

if __name__ == '__main__':for i in range(1,101):craw_one_page(i)

贝壳上就显示了100页的租赁信息,我就都扒下来了。

剩下就是慢慢等待的时间了,本次没有用进程池处理,所以时间相对来说会慢很多。。。


这些就是导出结果啦~~
数据清洗后可以发现以下情况:
(图画的很一般,多多见谅。。。)

根据不同城区房屋租赁的平均面积和价格来看,昌平是平均租赁面积最小的,但是平均租赁价格确是数一数二的高,后边就知道了,都是大回龙观做的贡献。。。


可以看到,北京市房屋租赁热点地区,前四名分别是:朝阳(遍地开花)、昌平(回龙观一马当先)、通州(新华大街,北关,通州北苑三足鼎立),三个城区的房屋租赁数量占到了75%以上。。。


这是不同城区租赁房屋的户型占比图,数字是房屋中卧室的数量。可以看到昌平这边,租赁的房屋大多数都是4居室,属于大房子。
但是为啥在之前的图表中昌平的平均房屋面积是最小的呢?因为我发现大回龙观中房屋都是拆开租赁的,写的是4居室,但是价格和面积,却是那其中一个小屋子的描述。。。。

分析做的比较简单,基本就这些内容了,奉上几张不同城区的热点租赁地区的文字云~~

朝阳区:

昌平区:

通州区:

爬取贝壳上北京房屋的租赁信息相关推荐

  1. python爬取贝壳找房之北京二手房源信息

    所用库 requests xpath解析库 multiprocessing多进程 pandas库用于保存csv文件 实战背景 本文首发于:python爬取贝壳找房之北京二手房源信息 主要是为了做北京二 ...

  2. 爬取贝壳和房天下——北京二手房在售和已成交百万级别数据(附详细思路和部分源码)

    前言 在港校做RA期间,本周老师安排了爬取国内二手房的交易网站,我先调研对比了各平台,之后选取了房天下和贝壳的数据进行爬取 贝壳 房天下 贝壳需要注册登录才能访问,房天下不需要 因课题保密的要求,数据 ...

  3. BeautifulSoup爬取贝壳网成都二手房源信息(附:完整源代码)

    BeautifulSoup爬取贝壳网成都二手房源信息 最近想出一套二手房,刚好在学习爬虫,那就顺手爬一下贝壳上成都各区二手房信息了解一下行情,本篇先介绍数据爬取,数据分析稍后有时间再写.仅用于技术交流 ...

  4. 【Python爬虫】从零开始爬取Sci-Hub上的论文(串行爬取)

    [Python爬虫]从零开始爬取Sci-Hub上的论文(串行爬取) 维护日志 项目简介 步骤与实践 STEP1 获取目标内容的列表 STEP2 利用开发者工具进行网页调研 2.1 提取文章链接和分页链 ...

  5. 利用CSS选择器爬取豆瓣上的图书

    利用CSS选择器爬取豆瓣上的图书 主要技术:熟练掌握requests.BeautifulSoup 爬取图书链接 "https://book.douban.com/latest?icn=ind ...

  6. python爬取电影评分_用Python爬取猫眼上的top100评分电影

    代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...

  7. python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  8. 爬虫入门(三)——动态网页爬取:爬取pexel上的图片

    Pexel上有大量精美的图片,没事总想看看有什么好看的自己保存到电脑里可能会很有用 但是一个一个保存当然太麻烦了 所以不如我们写个爬虫吧(๑•̀ㅂ•́)و✧ 一开始学习爬虫的时候希望爬取pexel上的 ...

  9. Python爬虫,爬取51job上有关大数据的招聘信息

    Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...

最新文章

  1. JS学习笔记之call、apply的用法
  2. 计算机辅助设计课程描述,计算机辅助设计课程教学的现状与方法
  3. MySql DATE_FORMAT函数用法
  4. 原生支付url参数错误_小程序支付
  5. 基于深度学习的图像修补/完整方法分析
  6. python selenium实现百度搜索
  7. SCUT - 240 - 宝华的文件系统 - 模拟
  8. 【跃迁之路】【590天】程序员高效学习方法论探索系列(实验阶段347-2018.09.18)...
  9. 频谱仪使用方法图解_安全继电器工作原理、接线图、使用方法图解
  10. opencv 画出各种滤波器二维图像 证明拉普拉斯滤波器是一个高通滤波器
  11. iOS面试题大全66-85
  12. CICS的临时存储队列操作
  13. 软件安装过程中,系统提示需要安装.Net Framework 3.5解决
  14. php opendir 相对路径,我是wamp环境,怎么样让php的opendir函数可以接受相对路径?...
  15. ATK-SIM900A入门
  16. 华硕 x570 Ryzen 9 5900X电脑 Hackintosh 黑苹果efi引导文件
  17. 怎么查快递到哪里了?快递单号查询全部物流
  18. 图的存储 —— 邻接矩阵
  19. og属性优化教程,什么是og标签
  20. 用pyquery5行代码爬取百度热点新闻

热门文章

  1. oracle常用 to_date()怎么转换带am pm的时间格式?
  2. linux 系统cpu查看
  3. Springboot福佳生活超市进销存管理系统 毕业设计-附源码261620
  4. 不会崩的报名系统才是好报名系统,之浅谈
  5. Markdown语法简介,markdown导出PDF
  6. 力扣(LeetCode)官网首发!史上首本Java语言实现LeetCode题解手册
  7. 【速览】2021年中国黄茶主产地生产情况分析:行业处于复兴起步阶段[图]
  8. 20 时序图图形含义
  9. CAD怎么转换版本?转换器轻松转换
  10. 连接不成功,360手机助手