分享爬取链家地图找房房价数据的小爬虫

本文介绍了如何使用Python爬虫抓取链家网站上的地图找房数据,包括二手房均价,虽然遇到接口限制问题,但通过二手房房价页面找到了新的数据源。代码实现了循环遍历所有城市,抓取房价信息并存储到CSV文件中。
摘要由CSDN通过智能技术生成

一、说在前面

受人所托,爬取链家上地图找房的数据:https://bj.lianjia.com/ditu/
上面有按区域划分的二手房均价和在售套数,我们的任务就是抓下这些数据。
这里写图片描述

二、开干

2.1失败一次

老样子,Chrome 按下F12打开Chrome DevTools中的Network标签查看请求过程,像这种需要更新的数据大概率是通过后台接口请求返回的,遗憾的是在XHR下并没有找到接口,小泄气。
继续找,在JS下发现了一个可疑的请求:https://ajax.lianjia.com/map/search/ershoufang/
这里写图片描述
嘻嘻,就是你了。然后就是熟悉的模拟请求过程了,把Headers、Query String Parameters都带上,一通操作猛如虎之后:
这里写图片描述
什么鬼啊,一个简单的GET请求,模拟了所有请求头

爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
下面是使用Scrapy-redis爬取链家二手房房价的代码: 1. 创建一个Scrapy项目 ``` $ scrapy startproject lianjia ``` 2. 修改settings.py配置文件,启用Redis ``` # 启用Redis调度器 SCHEDULER = "scrapy_redis.scheduler.Scheduler" # 启用Redis去重 DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter" # 启用Redis队列 SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue" # 设置Redis连接信息 REDIS_HOST = 'localhost' REDIS_PORT = 6379 ``` 3. 创建一个Spider ``` $ scrapy genspider lianjia_spider lianjia.com ``` 4. 修改lianjia_spider.py ``` # 引入RedisSpider from scrapy_redis.spiders import RedisSpider class LianjiaSpider(RedisSpider): name = 'lianjia_spider' allowed_domains = ['lianjia.com'] # 设定爬取的初始链接 def start_requests(self): url = 'https://sh.lianjia.com/ershoufang/' yield scrapy.Request(url=url, callback=self.parse) # 解析二手房列表页 def parse(self, response): # 获取下一页链接并加入Redis队列 next_page = response.css('div.page-box a.next::attr(href)').get() if next_page is not None: next_page_url = response.urljoin(next_page) self.server.rpush('lianjia_spider:start_urls', next_page_url) # 解析二手房信息 house_list = response.css('ul.sellListContent li.clear') for house in house_list: # 获取房屋名称和链接 name = house.css('div.title a::text').get() link = house.css('div.title a::attr(href)').get() # 获取房屋价格 price = house.css('div.totalPrice span::text').get() # 获取房屋面积和户型 area = house.css('div.houseInfo a::text').getall()[1] layout = house.css('div.houseInfo a::text').getall()[0] # 输出房屋信息 print(name, link, price, area, layout) ``` 5. 运行爬虫 ``` $ scrapy runspider lianjia_spider.py ``` 6. 启动Redis队列 ``` $ redis-server ``` 7. 启动Redis Spider ``` $ scrapy runspider lianjia_spider.py ``` 运行后,Scrapy会将初始链接加入Redis队列,并从队列中获取链接进行爬取。当爬取到列表页时,会将下一页的链接加入Redis队列,从而实现了分布式爬取爬取到的房屋信息会输出到控制台。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值