所用库

  • requests
  • xpath解析库
  • multiprocessing多进程
  • pandas库用于保存csv文件

实战背景

本文首发于:python爬取贝壳找房之北京二手房源信息

主要是为了做北京二手房数据分析与挖掘,所以对贝壳找房公司数据进行相关获取,通过requests请求库进行爬取,xpath进行解析,并用pandas将数据保存成csv文件

爬取的url为:https://www.bj.ke.com/ershoufang/

源码及数据保存在我的github上:贝壳找房北京二手房爬虫源码及数据

声明:本源码和数据均用于个人学习,请勿商用,如侵犯贝壳找房公司权益,请联系我删除!

更多内容请关注大圣的专属空间

代码实现

代码比较简单,使用requests库进行请求即可,首先发现总共有100页数据,而且url比较有规律,为:'http://bj.ke.com/ershoufang/pg{number}/',其中number表示页数,从0开始至100,由于我们想获取更多的信息,因此先获取每个房源的详细页面的url,再根据详细页面的url解析页面内的房源详细信息,本次主要是采用xpath进行网页源码解析,同时为了提高爬虫效率,采用了多进程爬虫,具体代码如下:

# 目的,爬取贝壳找房数据# 每页 url = 'bj.ke.com/ershoufang/pg{}/'.format(i),然后获取房屋的详细url,对详细url进行尽可能多的数据采集# 爬虫中使用多线程、多进程import requests
import time
from multiprocessing import Pool
from lxml import etree
import pandas as pd
import os
import random# 获取房源的基本url
# 参数page
def get_home_url(page):url = 'http://bj.ke.com/ershoufang/pg{}/'.format(page)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36','Cookie': 'lianjia_uuid=e6a91b7a-b6a4-40b5-88c6-ff67759cbc8a; crosSdkDT2019DeviceId=-51npj6--xbmlw5-f22i5qg8bh36ouv-yttqkmwdf; _ga=GA1.2.121082359.1579583230; ke_uuid=6de1afa21a5799c0874702af39248907; __xsptplus788=788.1.1579583230.1579583347.4%234%7C%7C%7C%7C%7C%23%23Q6jl-k46IlXjCORdTOp6O3JyzHokoUrb%23; select_city=110000; digv_extends=%7B%22utmTrackId%22%3A%2280418605%22%7D; lianjia_ssid=a4ab1bc0-cb04-492f-960c-342c66065da0; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1583897013,1583932737; User-Realip=111.196.247.121; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216fc67f100b140-06f07f8f707639-33365a06-1049088-16fc67f100c603%22%2C%22%24device_id%22%3A%2216fc67f100b140-06f07f8f707639-33365a06-1049088-16fc67f100c603%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22pinzhuan%22%2C%22%24latest_utm_campaign%22%3A%22wybeijing%22%2C%22%24latest_utm_content%22%3A%22biaotimiaoshu%22%2C%22%24latest_utm_term%22%3A%22biaoti%22%7D%7D; Hm_lpvt_9152f8221cb6243a53c83b956842be8a=1583933576; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMjAxZjBjNWU1ZWE1ZGVmYjQxZDFlYTE4MGVkNWI1OGRjYzk5Mzc2MjEwNTcyMWI3ODhiNTQyNTExOGQ1NTVlZDNkMTY2MWE2YWI5YWRlMGY0NDA3NjkwNWEyMzRlNTdhZWExNDViNGFiNWVmMmMyZWJlZGY1ZjM2Y2M0NWIxMWZlMWFiOWI2MDJiMzFmOTJmYzgxNzNiZTIwMzE1ZGJjNTUyMWE2ZjcxYzZmMTFhOWIyOWU2NzJkZTkyZjc3ZDk1MzhiNjhhMTQyZDQ2YmEyNjJhYzJmNjdjNmFjM2I5YzU0MzdjMDkwYWUwMzZmZjVjYWZkZTY5YjllYzY0NzEwMWY2OTc1NmU1Y2ExNzNhOWRmZTdiNGY4M2E1Zjc2NDZmY2JkMGM2N2JiMjdmZTJjNjI2MzNkMjdlNDY4ODljZGRjMjc3MTQ0NDUxMDllZThlZDVmZmMwMjViNjc2ZjFlY1wiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCJkMDI2MDk0N1wifSIsInIiOiJodHRwczovL2JqLmtlLmNvbS9lcnNob3VmYW5nLzE5MTExMzE5NTEwMTAwMTcxNzU5Lmh0bWwiLCJvcyI6IndlYiIsInYiOiIwLjEifQ=='}text = requests.get(url,headers=headers).texthtml = etree.HTML(text)detail_url = html.xpath('//ul[@class="sellListContent"]//li[@class="clear"]/a/@href')return detail_url# 获取房源详细数据信息
def get_home_detail_infos(detail_url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36','Cookie': 'lianjia_uuid=e6a91b7a-b6a4-40b5-88c6-ff67759cbc8a; crosSdkDT2019DeviceId=-51npj6--xbmlw5-f22i5qg8bh36ouv-yttqkmwdf; _ga=GA1.2.121082359.1579583230; ke_uuid=6de1afa21a5799c0874702af39248907; __xsptplus788=788.1.1579583230.1579583347.4%234%7C%7C%7C%7C%7C%23%23Q6jl-k46IlXjCORdTOp6O3JyzHokoUrb%23; select_city=110000; digv_extends=%7B%22utmTrackId%22%3A%2280418605%22%7D; lianjia_ssid=a4ab1bc0-cb04-492f-960c-342c66065da0; Hm_lvt_9152f8221cb6243a53c83b956842be8a=1583897013,1583932737; User-Realip=111.196.247.121; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216fc67f100b140-06f07f8f707639-33365a06-1049088-16fc67f100c603%22%2C%22%24device_id%22%3A%2216fc67f100b140-06f07f8f707639-33365a06-1049088-16fc67f100c603%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22pinzhuan%22%2C%22%24latest_utm_campaign%22%3A%22wybeijing%22%2C%22%24latest_utm_content%22%3A%22biaotimiaoshu%22%2C%22%24latest_utm_term%22%3A%22biaoti%22%7D%7D; Hm_lpvt_9152f8221cb6243a53c83b956842be8a=1583933576; srcid=eyJ0Ijoie1wiZGF0YVwiOlwiMjAxZjBjNWU1ZWE1ZGVmYjQxZDFlYTE4MGVkNWI1OGRjYzk5Mzc2MjEwNTcyMWI3ODhiNTQyNTExOGQ1NTVlZDNkMTY2MWE2YWI5YWRlMGY0NDA3NjkwNWEyMzRlNTdhZWExNDViNGFiNWVmMmMyZWJlZGY1ZjM2Y2M0NWIxMWZlMWFiOWI2MDJiMzFmOTJmYzgxNzNiZTIwMzE1ZGJjNTUyMWE2ZjcxYzZmMTFhOWIyOWU2NzJkZTkyZjc3ZDk1MzhiNjhhMTQyZDQ2YmEyNjJhYzJmNjdjNmFjM2I5YzU0MzdjMDkwYWUwMzZmZjVjYWZkZTY5YjllYzY0NzEwMWY2OTc1NmU1Y2ExNzNhOWRmZTdiNGY4M2E1Zjc2NDZmY2JkMGM2N2JiMjdmZTJjNjI2MzNkMjdlNDY4ODljZGRjMjc3MTQ0NDUxMDllZThlZDVmZmMwMjViNjc2ZjFlY1wiLFwia2V5X2lkXCI6XCIxXCIsXCJzaWduXCI6XCJkMDI2MDk0N1wifSIsInIiOiJodHRwczovL2JqLmtlLmNvbS9lcnNob3VmYW5nLzE5MTExMzE5NTEwMTAwMTcxNzU5Lmh0bWwiLCJvcyI6IndlYiIsInYiOiIwLjEifQ=='}proxies = {'http': 'http://136.228.128.164:53052'}detail_text = requests.get(detail_url,headers=headers).texthtml = etree.HTML(detail_text)all_data = []# 解析获取相关数据# 所在地址home_location = html.xpath('//div[@data-component="overviewIntro"]//div[@class="content"]//div[@class="areaName"]/span[@class="info"]/a/text()')all_data.append(home_location)# 小区名称local_name = html.xpath('//div[@data-component="overviewIntro"]//div[@class="content"]//div[@class="communityName"]/a/text()')[0]all_data.append(local_name)# 总价格total_price = html.xpath('//div[@data-component="overviewIntro"]//div[@class="content"]//div[@class="price "]/span[@class="total"]/text()')[0]all_data.append(total_price)# 单价unit_price = html.xpath('//div[@data-component="overviewIntro"]//div[@class="content"]//div[@class="price "]//div[@class="unitPrice"]/span/text()')[0]all_data.append(unit_price)# 房屋基本信息home_style = html.xpath('//div[@class="introContent"]//div[@class="base"]//div[@class="content"]/ul/li/text()')all_data.append(home_style)# 房屋交易属性信息transaction_info = html.xpath('//div[@class="introContent"]//div[@class="transaction"]//div[@class="content"]/ul/li/text()')all_data.append(transaction_info)# 小区均价xiaoqu_price = html.xpath('//div[@class="xiaoquCard"]//div[@class="xiaoqu_main fl"]//span[@class="xiaoqu_main_info price_red"]/text()')[0].replace(' ','')all_data.append(xiaoqu_price)# 小区建造时间xiaoqu_built_time = html.xpath('//div[@class="xiaoquCard"]//div[@class="xiaoqu_main fl"]//span[@class="xiaoqu_main_info"]/text()')[0].replace(' ','').replace('\n','')all_data.append(xiaoqu_built_time)# 小区建筑类型xiaoqu_built_style = html.xpath('//div[@class="xiaoquCard"]//div[@class="xiaoqu_main fl"]//span[@class="xiaoqu_main_info"]/text()')[1].replace(' ','').replace('\n','')all_data.append(xiaoqu_built_style)# 小区楼层总数xiaoqu_total_ceng = html.xpath('//div[@class="xiaoquCard"]//div[@class="xiaoqu_main fl"]//span[@class="xiaoqu_main_info"]/text()')[2].replace(' ','').replace('\n','')all_data.append(xiaoqu_total_ceng)return all_data# 数据保存至csv文件里(使用pandas中的to_csv保存)
def save_data(data):data_frame = pd.DataFrame(data,columns=['小区位置','小区名称','房屋总价','房屋单价','房屋基本信息','房屋交易信息','小区均价','小区建造时间','小区房屋类型','小区层数'])print(data_frame)data_frame.to_csv('beijing_fang111.csv',header=False,index=False,mode='a',encoding='utf_8_sig')def main(page):print('开始爬取第{}页的数据!'.format(page))# choice_time = random.choice(range(0,5))# print(choice_time)urls = get_home_url(page)for url in urls:print('开始爬去详细网页为{}的房屋详细信息资料!'.format(url))all_data = get_home_detail_infos(detail_url=url)data = []data.append(all_data)save_data(data)if __name__ == "__main__":page = range(0,100)print('爬虫开始')pool = Pool(processes=4)pool.map(main,page)pool.close()pool.join()

贝壳找房也有反爬,主要是针对IP访问次数过时候会提示手动验证,其可以通过设置请求头User-Agent和设置cookies进行解决,如果可以的话也可以通过代理IP进行访问爬取数据。

运行代码,最终结果如下:

爬取的数据

数据暂时按照如上存储,后续进行数据分析的话对数据进行清洗、格式化的处理。

总结

本站爬虫相对简单,没有做太复杂的反爬,后续针对获取的数据进行数据分析及做相关房价的预测,敬请关注!!!

python爬取贝壳找房之北京二手房源信息相关推荐

  1. Python爬虫 | 爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!

    文章目录 1.概述 2.数据采集 3.数据清洗 3.1.读取数据 3.2.去掉车位(地下室)数据 3.3.房源信息解析 4.数据处理及可视化 4.1.各地区二手房源数 4.2.各地区二手房均价 4.3 ...

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

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

  3. 用python爬取3dm上的单机游戏评测信息

    用python爬取3dm上的单机游戏评测信息 参考结果 #爬取3dm上单机游戏评测榜,50页的相关信息import requests from lxml import etree headers={& ...

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

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

  5. 爬取链家网站的北京租房信息

    本来准备这个暑假好好复习,但学校安排暑期实践,既然学校安排这个,而且我自己也觉得需要提高一下自己的能力,所以静下心来做点事吧.我们要做到项目是分析北京地区的租房的信息分析. 我们需要做的是爬取链家网站 ...

  6. python爬取华为应用商城app的标签信息

    目录 一.需求 二.需求分析 一级页面数据定位 二级页面数据定位 小结 三.python实现:爬取[应用]需求数据 四.python实现:爬取[游戏]需求数据 五.[应用]信息翻页问题处理实现 小结 ...

  7. 利用python爬取贝壳网租房信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  8. python 爬取贝壳的一些思路和方法设计(用地址找到小区名字)

    1.查mysql 获取 title 或者 address 2.用title或者address参数,request.get方法 查百度地图的地址api: http://api.map.baidu.com ...

  9. python爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

最新文章

  1. 实战Nagios+Ganglia发送警告信息,短信,微信等
  2. 网友问答之:AD、DNS转发器、WINS不能自动启动
  3. Jmeter 压测 http(s)
  4. android 关于页面,解析android中的帮助、about、关于作者、HELP等提示页面
  5. python3元组和序列
  6. php主键自增sql语句,sql语句id自增的问题
  7. Python——赋值、浅拷贝、深拷贝
  8. sle linux lftp禁止匿名登陆_软件测试常用linux命令整理
  9. 这些深度学习术语,你了解多少?(上)
  10. Calendar的api方法
  11. Paradigm此前投资Uniswap的资金价值或超30亿美元
  12. jq遍历的基础语法之一
  13. java 人脸识别 性别识别
  14. 数学建模系列-预测模型(一)---神经网络模型
  15. selenium实战二:登入QQ空间
  16. win11自带的照片查看器无法打印问题解决
  17. 塞班系统更新服务器,塞班系统又更新了,又更新了,仿佛回到十年前!
  18. 武音硕士研究生《计算机音乐作曲》培训,武汉音乐学院2016年硕士考试《计算机音乐作曲》大纲及参考书目...
  19. win10开机显示无网络连接服务器,Win10开机无法连接网络
  20. 公司现有一个工作组workgroup,需要添加samba服务器作为文件服务器,并发布共享目录

热门文章

  1. 小米2S手机开启开发者选项
  2. 前端三刺客---JS(WebAPI)
  3. 管出来的老公嘴服,疼出来的老公心服
  4. Unity使用陀螺仪检测屏幕方向
  5. 毕业设计-基于机器自动驾驶目标检测研究-YOLO
  6. MATLAB算法实战应用案例精讲-【深度学习工具篇】sift特征提取
  7. 2006年十二生肖开运大预言
  8. Android开发学习——记单词APP安卓注册登录跳转
  9. ros环境下配置orb-slam2遇到的问题
  10. Vite + Vue3 项目中,使用 vw/vh 适配移动端,并通过 Android Studio 打包