有小伙伴说想拿链家二手房信息做数据分析,让帮忙抓点数据。并没有搞过,网上搜了一些资料试了一下,感觉不难可以搞,下面小结一下。

工具

  • python3
  • python的三方库:
    • BeautifulSoup(用于解析数据)
    • pandas(用于处理数据,存储成Excel)
    • requests (用于发送请求)

三方库库的安装也比较简单,直接使用 pip install 相应的库名 即可:

pip install pandas
pip install requests
pip install beautifulsoup4
复制代码

思路

抓包基本的意思就是用代码模拟用户的请求,然后解析相应的网页内容,择取出需要的信息即可。 简单看了一下链家的网页结构,是比较整齐的。这种就是深圳二手房列表分页的链接:

https://sz.lianjia.com/ershoufang/pg1
https://sz.lianjia.com/ershoufang/pg2
...
https://sz.lianjia.com/ershoufang/pg99
https://sz.lianjia.com/ershoufang/pg100
复制代码

可以请求一下这个链接,然后解析返回结果,可以抓取到每一个房子详情页面的链接。我这边是通过正则匹配的方式解析的(详情参考源码中catchHouseList函数)。解析的结果大概像这样子:

https://sz.lianjia.com/ershoufang/105101151981.html
https://sz.lianjia.com/ershoufang/105101102328.html
https://sz.lianjia.com/ershoufang/105100779210.html
https://sz.lianjia.com/ershoufang/105101254525.html
https://sz.lianjia.com/ershoufang/105101201989.html
https://sz.lianjia.com/ershoufang/105101262457.html
复制代码

获取详情链接之后,再请求这个详情链接,可以获得到详情信息。把获取到的详情信息通过 BeautifulSoup 解析,就能得到你要的数据。 最后,把这个数据通过 pandas 写入到Excel中即可(参考appendToXlsx函数)。写的时候是append的方式。

注意的是因为大部分网站对于链接访问都有一些限制,诸如访问太频繁了,服务器可能认为这个请求不正常,不会返回正确结果。因此每次请求一个网页之后,会等一会儿再请求下一个网页。不至于被服务器拒绝。

# 我这里设置为3秒
time.sleep(3)
复制代码

源码

下面是我的源码,应该安装完相应的三方库,在python环境运行下面的代码即可:


import requests
from bs4 import BeautifulSoup
import sys
import os
import time
import pandas as pd
import numpy as np
from parsel import Selector
import reheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36'}def catchHouseList(url):resp = requests.get(url, headers=headers, stream=True)if resp.status_code == 200:reg = re.compile('<li.*?class="clear">.*?<a.*?class="img.*?".*?href="(.*?)"')urls = re.findall(reg, resp.text)return urlsreturn []def catchHouseDetail(url):resp = requests.get(url, headers=headers)print(url)if resp.status_code == 200:info = {}soup = BeautifulSoup(resp.text, 'html.parser')info['标题'] = soup.select('.main')[0].textinfo['总价'] = soup.select('.total')[0].textinfo['总价单位'] = soup.select('.unit')[0].textinfo['每平方售价'] = soup.select('.unitPriceValue')[0].text# p = soup.select('.tax')# info['参考总价'] = soup.select('.tax')[0].textinfo['建造时间'] = soup.select('.subInfo')[2].textinfo['小区名称'] = soup.select('.info')[0].textinfo['所在区域'] = soup.select('.info a')[0].text + ':' + soup.select('.info a')[1].textinfo['链家编号'] = str(url)[34:].rsplit('.html')[0]info['房屋户型'] = str(soup.select('.content')[2].select('.label')[0].next_sibling)info['所在楼层'] = soup.select('.content')[2].select('.label')[1].next_siblinginfo['建筑面积'] = soup.select('.content')[2].select('.label')[2].next_siblinginfo['户型结构'] = soup.select('.content')[2].select('.label')[3].next_siblinginfo['套内面积'] = soup.select('.content')[2].select('.label')[4].next_siblinginfo['建筑类型'] = soup.select('.content')[2].select('.label')[5].next_siblinginfo['房屋朝向'] = soup.select('.content')[2].select('.label')[6].next_siblinginfo['建筑结构'] = soup.select('.content')[2].select('.label')[7].next_siblinginfo['装修情况'] = soup.select('.content')[2].select('.label')[8].next_siblinginfo['梯户比例'] = soup.select('.content')[2].select('.label')[9].next_siblinginfo['供暖方式'] = soup.select('.content')[2].select('.label')[10].next_siblinginfo['配备电梯'] = soup.select('.content')[2].select('.label')[11].next_sibling#  info['产权年限'] = str(soup.select('.content')[2].select('.label')[12].next_sibling)return infopassdef appendToXlsx(info):fileName = './链家二手房.xlsx'dfNew = pd.DataFrame([info])if(os.path.exists(fileName)):sheet = pd.read_excel(fileName)dfOld = pd.DataFrame(sheet)df = pd.concat([dfOld, dfNew])df.to_excel(fileName)else:dfNew.to_excel(fileName)def catch():pages = ['https://sz.lianjia.com/ershoufang/pg{}/'.format(x) for x in range(1, 1001)]for page in pages:print(page)houseListURLs = catchHouseList(page)for houseDetailUrl in houseListURLs:try:info = catchHouseDetail(houseDetailUrl)appendToXlsx(info)except:passtime.sleep(3)passif __name__ == '__main__':catch()复制代码

瞎墨迹

  • 虽然技术含量并不高,只是涉及到一些三方工具的使用。不过实践的过程中还是遇到一些问题,诸如对pandas的使用,因为从未接触过,就折腾了很久。大概很多看起来很简单的东西,真正弄起来的时候,依旧有预料不到的问题。
  • 其次是抓包这件事,技术上觉得并不奇特(当然有些网站的抓包还是有难度的),但是小伙伴需要这个,也许一件事情并不仅仅从技术上考量其价值。

参考资料

谷歌百度一堆,无法判断原创性,就懒得贴了。

使用python3抓取链家二手房数据相关推荐

  1. python爬虫requests源码链家_python数据分析实例:python抓取链家二手房源数据和分析...

    python语言,在数据分析方面,涵盖了"数据获取→数据处理→数据分析→数据可视化"这个流程中每个环节,不可不谓之为利器. 本篇文章我们就利用python语言在数据分析方面的应用, ...

  2. scrapy 爬取链家二手房数据

    学习使用 只爬取展示的展示的3000条数据 spider: # -*- coding: utf-8 -*- from urllib import parse import scrapy from sc ...

  3. 掌财社:python怎么爬取链家二手房的数据?爬虫实战!

    我们知道爬虫的比较常见的应用都是应用在数据分析上,爬虫作为数据分析的前驱,它负责数据的收集.今天我们以python爬取链家二手房数据为例来进行一个python爬虫实战.(内附python爬虫源代码) ...

  4. 爬取北京链家二手房数据

    利用python爬取了北京链家主页的二手房数据,爬取时间为2020年1月8日.由于链家只显示了100页.每页30条,因此只能爬取3000条数据. 后续将爬取各区的小区名,对每个小区的在售二手房数据进行 ...

  5. Python爬虫三:抓取链家已成交二手房信息(58W数据)

    环境:Windows7+python3.6+Pycharm2017 目标:抓取链家北京地区已成交二手房信息(无需登录),如下图,户型.朝向.成交时间价格等,保存到csv.最后一共抓取约58W数据,程序 ...

  6. 租房不入坑不进坑,Python爬取链家二手房的数据,提前了解租房信息

    目录 前言 一.查找数据所在位置: 二.确定数据存放位置: 三.获取html数据: 四.解析html,提取有用数据: 前言 贫穷限制了我的想象,从大学进入到社会这么久,从刚开始的兴致勃勃,觉得钱有什么 ...

  7. python-scrapy-MongoDB 爬取链家二手房

    python-scrapy-MongoDB 爬取链家二手房 链家二手房房源数据抓取 目标网址为http://bj.lianjia.com/ershoufang/ 分析网址 创建项目 scrapy st ...

  8. python找房源_python抓取链家房源信息(二)

    试着用scrapy将之前写的抓取链家网信息的重新写了写 然后先是用了第一页的网页作为测试,调试代码,然后发现总是抓取的时候遇见了 类似于这样的问题,并且抓取不到信息 2017-03-28 17:52: ...

  9. python爬虫之scrapy初试与抓取链家成交房产记录

    接上一篇文章,本机安装好python之后和scrapy之后,我们开始学习使用scrapy创建爬虫程序. 今天先来点简单的,不那么复杂,先看看抓取链家网里面的房价信息. 首先使用CMD命令行进入F盘创建 ...

  10. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

最新文章

  1. 预测汽车级Linux专业技术的需求
  2. 阿里大神分享API网关在微服务架构中的应用!
  3. struts2使用注解--ACTION中的应用
  4. Java中 读-写 文件 BufferedReader BufferedWriter
  5. P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】
  6. 工作228:小程序学习2开始布局页面2
  7. Windows进程通信之共享内存通信(C++)
  8. C++学习笔记————WINAPI宏定义
  9. 火币辟谣:警惕假冒火币生态链网站
  10. kdj值应用口诀_KDJ买卖绝学!背熟它短线选股不用愁
  11. Visual C++ 时尚编程百例013(CRect类)
  12. PlatformTransactionManager
  13. 闫墨杰415知识点总结
  14. java远程方法调用(rmi)--好_java 远程方法调用(RMI)
  15. 纵坐标是横的还是竖的_600*1200墙砖横贴好,还是竖贴好?讲讲这两种贴法的问题...
  16. 弱电智能化施工组织设计方案
  17. 如何ajax上传图片,ajax上传图片文件
  18. 如何用计算机函数计算房租,Excel商铺租金模板,租金每两年递增5%,具备收租期、租赁起止期、单价函数自动计算功能...
  19. 电动阀门和气动阀门有什么区别
  20. javaWeb文档预览之office转pdf(附详细代码)

热门文章

  1. HTML中视频的压缩方式,快速将视频压缩到最小的技巧!
  2. 电脑mac地址的查看的三种方式
  3. windows无法连接到某个wifi_Windows无法连接到网络解决方法
  4. C# 多线程如何访问同一个数据
  5. Java中的Socket是什么?
  6. C#中的Socket
  7. 项目管理中的量化管理
  8. Mac Mini 安装Ubuntu20.04 KVM
  9. #7220. 「微课 3.6.2 例 1」亚瑟王
  10. BZOJ 4008: [HNOI2015]亚瑟王