热点

爬取链家网二手房数据

时间:2010-12-5 17:23:32  作者:时尚   来源:娱乐  查看:  评论:0
内容摘要:链家网的二手房列表页,URL 里藏着区、板块、页码三个变量。拿北京举例,https://bj.lianjia.com/ershoufang/dongcheng/pg2/ 这种结构一眼就能拆开。东城是板

链家网的网手二手房列表页,URL 里藏着区、房数板块、网手页码三个变量。房数拿北京举例,网手https://bj.lianjia.com/ershoufang/dongcheng/pg2/ 这种结构一眼就能拆开。房数东城是网手板块,pg2 是房数第二页。想批量拿数据,网手第一步就是房数拼 URL,把板块和页码做成循环。网手

但直接 requests.get 会吃闭门羹。房数链家对请求头查得严,网手User-Agent 不带浏览器标识,房数返回的网手就是 403 页面。我试过用默认的 python-requests UA,十次里十次被拒。换成 Chrome 的 UA 字符串,再补上 Accept-Language 和 Referer,才拿到正常的 HTML。

拿到页面后别急着上 BeautifulSoup。链家的列表页数据其实藏在页面源码的一个 script 标签里,结构是 window.__INITIAL_STATE__ 后面跟一大坨 JSON。用正则抠出来解析,比逐层找 div 快得多,也稳得多。我最早用 CSS 选择器抓 .info.clear .title a,页面一改版就全废。后来换成解析 JSON,字段名变了至少还能看到报错在哪。

每条房源的核心字段就那么几个:标题、总价、单价、小区名、户型、面积、朝向、楼层、建成年代。总价和单价在 JSON 里是数字,但页面上显示的是“万”和“元/平米”,别搞混。有一回我忘了除 10000,结果整张表的总价都是几百万亿,排查了半天才发现是单位问题。

翻页有坑。链家最多只让看 100 页,第 101 页直接返回空列表或者跳回第一页。北京东城的二手房远不止 100 页,所以按板块切分是必须的。每个板块单独翻,翻到空页就停。更细的做法是按总价区间再切一刀,比如 200 万以下、200 到 400 万,这样每个区间的房源数都控制在 100 页以内。

速度控制是另一个关键。我一开始用多线程,十个线程同时跑,不到三分钟 IP 就被封了。链家的反爬不算特别激进,但并发高了照样触发风控。后来改成单线程加随机延时,每请求一次 sleep 1 到 3 秒,跑一晚上能拿几万条。慢是慢,胜在稳定。

数据存下来之后,清洗比爬取更费时间。同一个小区名字有“万科青青家园”和“万科青青家园东区”两种写法,面积字段有的带“平米”有的不带,楼层描述“中楼层/共 18 层”得拆成两个数值。这些琐碎活儿没有捷径,只能一条条写规则去匹配。

最后说个观察。链家页面上挂牌价和实际成交价差距不小,尤其是老破小。我对比过望京某小区的挂牌数据和我从中介朋友那拿到的成交记录,同户型挂牌 620 万,实际成交 578 万。爬下来的数据做市场趋势参考可以,真拿来做定价决策,还得再找成交价数据源交叉验证。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap