资讯专栏INFORMATION COLUMN

养只爬虫当宠物(Node.js 爬虫爬取 58 同城租房信息)

宋华 / 1880人阅读

摘要:一个爬虫租房软件。获取导航页以及数据打开同城主页,我主要针对杭州的二手房进行了爬取分析,所以进入杭州租房。这次我们需要解析房屋所在地信息,用来可视化显示。具体做法可以参照相关反爬虫策略的文章。

一个爬虫租房软件。

先上一个源代码吧。

https://github.com/answershuto/Rental

欢迎指导交流。

效果图

搭建Node.js环境及启动服务

安装node以及npm,用express模块启动服务,加入自己所需要的中间件即可,这个不是本文所要讨论的重点,可以参考网上的一些教程搭建环境。

获取导航页URL以及数据

打开58同城主页,我主要针对杭州的二手房进行了爬取分析,所以进入杭州租房。

http://hz.58.com/chuzu/pn1/?key=%E6%9D%AD%E5%B7%9E%E7%A7%9F%E6%88%BF%E5%AD%90&cmcskey=%E7%A7%9F%E6%88%BF%E5%AD%90&final=1&PGTID=0d3090a7-0004-f43c-ee04-95c2ea3d031f&ClickID=6

可以得到这一串URL,上下页查看后就不难发现,pn后面的数字就是页面的页码,?后面的是一些get请求带带参数。用一个函数即可通过页码得到正确的URL。

function getUrl(page = 1){
    return  "http://hz.58.com/chuzu/pn"+page+"/?key=%E6%9D%AD%E5%B7%9E%E7%A7%9F%E6%88%BF%E5%AD%90&cmcskey=%E7%A7%9F%E6%88%BF%E5%AD%90&final=1&PGTID=0d3090a7-0004-f43c-ee04-95c2ea3d031f&ClickID=6";
}

根据上面的URL我们就可以访问到每一页的所有租房信息

用cheerio模块解析dom

安装cheerio模块,使用cheerio模块解析dom,然后就可以类似jquery一样访问dom了。

var cheerio = require("cheerio");
let $ = cheerio.load(html);
获取每个租房信息的URL

打开开发者模式,osX(option + command + I),windows( F12 ),然后就可以在elements中看到文档结构了。(这里以chrome为例)

可以看到对应的a标签,我们只需要提取出该url即可,及对应的href,就是它点击跳转的URL。

[单间]支持月付 文一路梧桐公寓 耀江文萃苑 中豪晴元

该a标签的class为t,用$("a.t")即可得到所有的a标签的对象,得到的是一个数组,遍历取出href属性即可。

for(let i = 0; i < $("a.t").length; i++){
    rentalObj.add($("a.t")[i].attribs.href)
}

得到了这些URL,接下来就可以用这些URL访问具体的租房信息了,每个URL对应一个租房页面。

根据租房信息的URL访问相应页面,爬取数据

还是先进入页面打开开发者模式。

这次我们需要解析房屋所在地信息,用来可视化显示。

$("td.house-xqxq-content a.ablue")

加上父标签可以过滤出更有针对性的dom,此时过滤出的是小区名称、本月均价、所在商圈等信息的dom,我们现在只需要第一个dom里面的数据,所以访问数组的[0]即可。

除此之外为还需要页面里面的一张展示房屋信息的一张图片,找到对应dom可以发现id为smainPic。

$("#smainPic")["0"].attribs.src

这样访问即可得到图片的URL。

其他我们还可以用同样的方法获取很多相关数据,比如$(".house-price").text()得到价格数据,$("span.tel-num.tel-font").text()可以得到房东的联系方式。

通过百度地图进行可视化展示

这里使用百度地图api
http://lbsyun.baidu.com/index.php?title=jspopular

var map = new BMap.Map("container");          // 创建地图实例  
map.centerAndZoom("杭州", 12);
var localSearch = new BMap.LocalSearch(map);
localSearch.setSearchCompleteCallback(function(searchResult){
    var poi = searchResult.getPoi(0);/*地理位置信息*/
})
ocalSearch.search(params[url].location);

获取经纬度以后再掉用相应的api在地图上显示即可,显示后再做什么效果,可自行发挥想象了。

关于反爬虫

在爬取过程中发现58同城的反爬虫策略,快速访问会让你输入验证码来验证是人在操作而不是代码访问。只要是人可以正常访问并不影响用户正常体验的网站都有办法绕过反爬虫策略。

先采用较慢的方式发送http请求访问,此外每隔一段时间最好停一下,然后再继续访问。除此之外用User-Agent字段伪装成浏览器。最保险的方法就是购买代理,让代理用不同的ip地址去访问网站,即可绕过反爬虫机制。

具体做法可以参照相关反爬虫策略的文章。

关于

作者:染陌

Email:answershuto@gmail.com or answershuto@126.com

Github: https://github.com/answershuto

Blog:http://answershuto.github.io/

知乎专栏:https://zhuanlan.zhihu.com/ranmo

掘金: https://juejin.im/user/58f87ae844d9040069ca7507

osChina:https://my.oschina.net/u/3161824/blog

转载请注明出处,谢谢。

欢迎关注我的公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82687.html

相关文章

  • node.js 89行爬虫爬取智联招聘信息

    摘要:智联其实一共写了两次,有兴趣的可以在源码看看,第一版的是回调版,只能一次一页的爬取。 写在前面的话,    .......还是不写了,直接上效果图。附上源码地址 github.lonhon showImg(https://segmentfault.com/img/bVUM3F?w=714&h=543);showImg(https://segmentfault.com/img/bVUM...

    _ivan 评论0 收藏0
  • Python爬虫学习:微信、知乎、新浪等主流网站的模拟登陆爬取方法

    摘要:微信知乎新浪等主流网站的模拟登陆爬取方法摘要微信知乎新浪等主流网站的模拟登陆爬取方法。先说说很难爬的知乎,假如我们想爬取知乎主页的内容,就必须要先登陆才能爬,不然看不到这个界面。图片描述知乎需要手机号才能注册登陆。 微信、知乎、新浪等主流网站的模拟登陆爬取方法摘要:微信、知乎、新浪等主流网站的模拟登陆爬取方法。 网络上有形形色色的网站,不同类型的网站爬虫策略不同,难易程度也不一样。从是...

    Kahn 评论0 收藏0
  • node.js 爬取招聘信息分析各职业钱途(爬虫+动态IP代理+数据可视化分析)

    摘要:成功爬取了拉钩网上多个招聘岗位的具体信息后,数据可视化并得出分析结果如下从整体看,北上广深杭这五个城市前端工程师招聘岗位,北京是遥遥领先,是深圳的两倍,是广州的三倍,其次到上海,深圳,杭州,广州居末。 前前言 本文首发于 github blog 不想看爬虫过程只想看职位钱途数据分析请看这里:前端招聘岗位分析C++招聘岗位分析JAVA招聘岗位分析PHP招聘岗位分析Python招聘岗位分析...

    546669204 评论0 收藏0
  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0
  • 爬豆瓣小组中的租房信息(mongo+node+vue)

    摘要:数目限制应该省略的条数数目限制排序方式函数的参数个数,必须是个,或者个。 基本思路 1.通过node中的 superagent 模拟http请求,去读取豆瓣小组的信息,对读取到的信息通过cheerio插件进行解析格式化以便于获取body中的信息存储到mongodb中 2.因为豆瓣会ban掉一写爬虫ip,所以爬取过程中会使用ip池挑选没有使用过的ip进行代理去爬取,并且会避免并发 使用m...

    vvpvvp 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<