爬虫第一弹:安居客房地产数据爬虫

本文介绍了一个基于Scrapy的安居客房产数据爬虫项目,详细解析了爬虫的设计思路与实现步骤,包括数据库搭建、数据抓取及处理等环节。
爬虫第一弹:安居客房地产数据爬虫
 一、功能分析:
1、我们要爬取的安居客南昌新房的420个楼盘的信息,每个楼盘涵盖 '楼盘名称' '楼盘特点' '参考单价' '物业类型' '开发商' '区域位置' '楼盘地址' '售楼处电话' '最低首付' '楼盘户型' '最新开盘' '交房时间' '售楼处地址' '预售许可证' '建筑类型' '产权年限' '容积率' '绿化率' '规划户数' '楼层状况' '工程进度' '物业管理费' '物业公司' '车位数' '车位比'。
2、通过mysql建立对应列的数据库anjuke,并将爬虫爬取出来的数据导入表格myanjuke;
3、通过mysql将数据导出为anjk.xml 方便后续的数据分析工作,从而分析房地产的影响因子和构建房地产的估价模型。
4、这个爬虫进一步优化可以爬取全国的房地产楼盘信息,是不是很激动,由于本项目主要用于项目演示,所以点到为止。

二、思路构建:
1、利用scrapy构建scrapy startproject anjukepjt,搭建项目,并通过scrapy genspider -t basic anjukespd anjuke.com构建基本的爬虫文件;
2、通过item.py构建所有数据项;
3、setting.py将爬虫协议关闭,打开
ITEM_PIPELINES 的组件
3、通过爬虫文件anjukespd.py 做到提取需要录入数据库所有数据项的信息;
4、通过pipelines工具对数据项进行进一步的处理后通过pymysql组件导入mysql;
5、通过mysql的导出功能导出anjk.xml
三、具体实现:
2.1、构建item时,一级页面的关键信息需要构建item,并且需要在页面详情页的爬取过程同样构造一个类似的item。比如一级页面的link,那么详情页就需要构造link1,这是为了在pipelines时方便在同一个循环中,方便数据的导入数据库的工作;
4.1、首先观察一级页面网页的构成 url= "https://nc.fang.anjuke.com/loupan/all/p" + str (i)+ "/"并通过构造以i的循环语句可以遍历南昌新房的所有14页信息;
4.2、通过
item[ "name" ]=response.xpath( "//div[2]/div[1]/div[3]/div/div/a[1]/h3/span/text()" ).extract(), item[ "link" ]=response.xpath( "//div[2]/div[1]/div[3]/div/div/a[1]/@href" ).extract()语句获取二级页面
4.3
、通过link,构建每个楼盘详情的链接
pat1 =  '(https://.*?/.*?/).*?html'
pat2 =  'https://.*?/.*?/(.*?html)'
newurl = re.compile(pat1).findall(item[ "link" ][m])[ 0 ] +  "canshu-"  + re.compile(pat2).findall(item[ "link" ][m])[ 0 ] +  "?from=loupan_tab"
4.4
、通过以上详情链接,并利用正则表达式爬取出楼盘详情所有我们需要的项目信息;
5.1、中文编码的问题:
import  urllib.request
import  io
import  sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,
encoding = 'gb18030' #改变标准输出的默认编码
headers = ( "User-Agent" , "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0" )
opener = urllib.request.build_opener()
opener.addheaders = [headers]
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(newurl).read().decode(
'utf-8' )
5.2、异常的处理
主要是针对通过正则表达式爬取某些字段时,由于项目太多,每个项目的列项目并不一致,有些可能本身就没有该项,如是就会出现爬不到数据的情况,而出现错误,所以需要进行异常处理。
tel=
'lp-icons lp-icons-tel"></i><span.*?>(.*?)</span>'
item[ "tel1" ] = re.compile(tel, re.S).findall( str (data))
try :
item[
"tel1" ][ 0 ]
except :
item[
"tel1" ]= [ " " , ]
四、项目总结
该项目是在学习了《精通Python网络爬虫+核心技术、框架与项目实战.pdf》后的一个拓展项目,也为了更好的展示自己的学习成果;学习本身让我对爬虫有了框架性的认识,懂得构建基本的框架。通过项目的实践,我对本书的知识点有了更深入清晰的认识。在编制该项目中中文编码的问题和异常处理以及具体数据项的正则构造是花费最多时间三块内容,感谢这个项目和这本书,让我终于从理论步入实践。


爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
### 安居客出租房(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉的出租房信息进行爬取,且需要自己手动更cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房的进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客爬取的房源信息,其中包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行了数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值