生活中遇到了问题,想去成都买个房,那哪个区域性价比高肯定要考虑一番了,最粗暴直接的就是看租售比,遂打算去链家网爬上各个小区的卖房单价和租房单价比上一比,python写爬虫无疑是最流行的了,但最近在研究node,感觉写个爬虫强化一下node姿势水平还是挺不错的。开整。
首先http请求工具和dom解析工具是必不可少的,严谨的说是对于像我这样的菜鸟是必不可少的,http请求工具我选了request,主流的还有superagent可选,dom解析cheerio应该是不二选择了,接口和jquery一样一样的。如果没接触过请先自行了解这两个库。
基本环境先搭建好,这个不在讨论范围,
1. 第一步我们先看抓一个网页是啥样的:
router.get('/sell_price', (req, res, next) =>{
request({
url:'http://cd.lianjia.com/ershoufang/pg1ng1nb1l1/',
headers: {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.3 (KHTML, like Gecko) Chrome/55.0.2883.9 Safari/537.3'} },function(error, response, body) {if (!error && response.statusCode == 200) {
res.send(body)
}
})
}
不出所料的话,你访问本机sell_price路由的时候链家对应的页面就会出现了。
其中有两点要说明,有的时候你不带User-Agent,网站会拒绝你的请求,chrome开发工具network里面随便找个连接,把里面User-Agent给考出来贴上,有备无患。
链家是UTF-8编码,就没啥说法了,但是比如网易,它是gb2312编码的,你拿过来就成火星文了,此时需要搞个解码工具,iconv-lite应该是主流了。我去爬了下网易,要注意一点,request拿过来的时候已经帮你按UTF-8解码了,你需要request时候设置encoding: null(与设置url同级),拿回来个buffer,再用iconv-lite解码。
2. 第二步我们抓过来是要获取里面的有用信息的,具体到我的目的,就是房价,面积,小区名等,
var $=chee