背景:需要获取58同城上面发布的职位信息,其中的包括职位的招聘要求,薪资福利,公司的信息,招聘者的联系方式。(中级爬虫的难度系数)
职位详情页分析
某个职位详情页的链接
某个职位的链接 https://qy.m.58.com/m_detail/29379880488200/
打开以上链接并且F12进入开发者模式
我们可以看见联系方式需要登陆后才可以查看。
登陆后,右击鼠标查看页面的源码,发现html页面并没有电话号码,这里初步的猜测是通过ajax来加载渲染的(一般都是这种套路)
全局搜索分析
由上面可见联系方式所在的div块是mobMsg和freecall,全局对这两个关键字做搜索,一步一步走下去。
<div class="msgGui">
<h3>联系方式</h3>
</div>
<dl>
<dt>联系电话:</dt>
<dd class="mobMsg">
<div id="freecall"></div>
</dd>
<dt>电子邮箱:</dt>
<dd>456151546@QQ.COM</dd>
<dt>公司网址:</dt>
<dd class="bColr">
<a href="http://http://WWW.SHSHENXINGKEMAO.COM">http://http://WWW.SHSHENXINGKEMAO.COM</a>
</dd>
</dl>
</div>
可惜的是,这次没有找到第二个mobMsg或者freecall关键字,当然啦,不是每一次全局搜索都是奏效的。
这里继续观察其他的请求,上面也是猜测是ajax请求做渲染的,故需要将注意力移到XHR模块和JS模块。
在JS模块找到如下标识的请求,可以看见请求返回的内容有一个叫virtualNum字段,顾名思义这个字段的内容可能要和我们找到电话有关系。
请求的链接
https://zpservice.58.com/numberProtection/biz/enterprise/mBind/?uid=29379880488200&callback=jsonp_callback2
返回的内容
{"msg":"ok","code":"0","virtualNum":"1wSca13IEbrpJNlYBR3OEQ=="}
这次再根据virtualNum做一次全部搜索。
这里印证了我们上面说的ajax做请求并渲染页面的做法,大多数的前端开发
都是采用这种套路。
JS代码块逆向分析
$.ajax({
type: "get",
url: "//zpservice.5