当前位置: 首页 > 科技观察

Python爬取房地产数据并显示在地图上!

时间:2023-03-15 00:04:21 科技观察

朋友,我又来了。这次写的是用python爬虫爬取乌鲁木齐的房产数据,并展示在地图上。我用BDP个人版做地图工具——免费的在线数据分析软件,数据可视化软件,这个可以导入csv或者excel数据。首先分析思路,爬取网站数据,获取社区名称、地址、价格、经纬度,保存到excel中。然后将excel数据上传到BDP网站,生成地图报告。这次用的是scrapy框架,可能有点大材小用。主要是学了之后用这个来练习。在写代码之前,我还是建议大家先对网站进行分析。数据,然后手写代码,因为善于分析可以事半功倍,乌鲁木齐房产,乌鲁木齐2017年新房,乌鲁木齐房产资讯-乌鲁木齐极物网有比较完整的数据这个网站。获取每页房产的LIST信息,翻页,点击进入详情页,获取房产的详细信息(包括名称、地址、价格、经纬度),然后使用管道保存itemtoexcel,最后在bdp中生成地图报告,废话少说,添加代码:JiwuspiderSpider.py#-*-coding:utf-8-*-fromscrapyimportSpider,Requestimportrefromjiwu.itemsimportJiwuItemclassJiwuspiderSpider(Spider):name="jiwuspider"allowed_domains=["wlmq.jiwu.com"]start_urls=['http://wlmq.jiwu.com/loupan']defparse(self,response):"""解析每个页面的房子列表:paramresponse::返回:“”“forurlinresponse.xpath('//a[@class="index_scale"]/@href')。extract():yieldRequest(url,self.parse_html)#获取列表集合中的url调用详情解析方法#如果下一页属性还存在,则获取下一页的urlnextpage=response.xpath('//a[@class="tg-rownum-nextindex-icon"]/@href').extract_first()#判断是否为空ifnextpage:yieldRequest(nextpage,self.parse)#回调继续解析defparse_html(self,回应):""&quo吨;解析每个属性信息的详情页,生成item:paramresponse::return:"""pattern=re.compile('.*?lng=\'(.*?)\';.*?lat=\'(.*?)\';.*?bname=\'(.*?)\';.*?''address=\'(.*?)\';.*?price=\'(.*?)\';',re.S)item=JiwuItem()results=re.findall(pattern,response.text)forresultinresults:item['name']=result[2]item['address']=result[3]#只取数字进行价格判断,如果为空则设置为0pricestr=result[4]pattern2=re.compile('(\d+)')s=re.findall(pattern2,pricestr)iflen(s)==0:item['price']=0else:item['price']=s[0]item['lng']=result[0]item['lat']=result[1]yielditemitem.py#-*-coding:utf-8-*-#Defineherethemodelsforyourscrapeditems##Seedocumentationin:#http://doc.scrapy.org/en/latest/topics/items.htmlimportscrapyclassJiwuItem(scrapy.Item):#definethefieldsforyouritemherelike:name=scrapy.Field()price=scrapy.Field()address=scrapy.Field()lng=scrapy.Field()lat=scrapy.Field()passpipelines.py注意这里是mongodb的save方法被评论了,你c选择保存方法#-*-coding:utf-8-*-#Defineyouritempipelineshere##Do不要忘记将您的管道添加到ITEM_PIPELINES设置#参见:http://doc.scrapy.org/en/latest/topics/item-pipeline.htmlimportpymongofromscrapy.confimportsettingsfromopenpyxlimportworkbookclassJiwuPipeline(object):wb=workbook.Workbook()ws=wb.activews.append(['communityname','address','price','longitude','latitude'])def__init__(self):#获取数据库连接信息host=settings['MONGODB_URL']port=settings['MONGODB_PORT']dbname=settings['MONGODB_DBNAME']client=pymongo.MongoClient(host=host,port=port)#定义数据库db=client[dbname]self.table=db[settings['MONGODB_TABLE']]defprocess_item(self,item,spider):jiwu=dict(item)#self.table.insert(jiwu)line=[item['name'],item['address'],str(item['price']),item['lng'],item['lat']]self.ws.append(line)self.wb.save('jiwu.xlsx')returnitem上次报表的数据mongodb数据库地图报表渲染:https://me.bdp.cn/share/index.html?shareId=sdo_b697418ff7dc4f928bb25e3ac1d52348