58同城招聘信息爬取:解决申请人数和浏览人数数据不一致问题
在爬取58同城招聘页面时,经常遇到一个棘手的问题:网页源代码显示的申请人数和浏览人数与页面实际显示的数据不符,源代码中往往显示为0,而页面实时更新的数据却与浏览器开发者工具(f12)中的elements内容一致。 这篇文章将探讨如何解决这个问题,获取准确的申请人数和浏览人数。
问题分析:
58同城为了防止数据被恶意爬取,采用了动态加载数据的方式。 页面上的申请人数和浏览人数并非直接从html源代码中获取,而是通过javascript异步加载的。因此,直接解析html源代码无法获得正确的数据。
解决方案:
要获取正确的申请人数和浏览人数,需要找到58同城提供的api接口。 通过分析网络请求,我们可以发现一个用于获取招聘信息统计数据的api接口,其url类似于以下格式:
https://statisticszp.58.com/position/totalcount/?infoid=27988...
其中infoid参数代表具体的职位id,需要根据目标招聘页面的url进行提取。
api返回数据示例:
api接口返回的json数据包含了我们需要的信息:
{ "deliverycount": 1141, // 申请人数 "commentcount": 0, "infocount": 4, // 浏览人数 "resumereadpercent": 0, "referurl": "", "nexturl": "null" }
deliverycount字段表示申请人数,infocount字段表示浏览人数。
实现步骤:
-
获取职位id (infoid): 分析目标招聘页面的url,找到职位id对应的参数值。 这可能需要使用正则表达式或其他字符串处理方法。
-
构造api请求url: 将提取到的infoid替换到api url模板中,形成完整的api请求url。
-
发送api请求: 使用python的requests库或其他http客户端发送get请求到api url。
-
解析json数据: 将api返回的json数据解析成python字典,提取deliverycount和infocount的值,即为正确的申请人数和浏览人数。
通过以上步骤,即可绕过58同城网页的动态加载机制,准确获取招聘页面的申请人数和浏览人数数据。 请注意,api接口的地址和参数名称可能会有变化,需要根据实际情况进行调整。 同时,请遵守58同城的robots.txt规则,避免对服务器造成过大压力。
以上就是如何在爬取58同城工作页面时获取正确的申请人数和浏览人数?的详细内容,更多请关注代码网其它相关文章!
发表评论