【实时更新】各大招聘网站信息一键查询
亲爱的朋友们,你们对于招聘信息的关注让我深感欣慰。在听取了大家的意见和建议后,我不断地对系统进行改进和优化。在此感谢大家提出的宝贵建议。
根据大家的反馈,我采纳了诸多改进意见。有的朋友希望能在手机端轻松访问,现已满足;有的朋友提到区域选择功能不足,现已增加更多选择;还有的朋友希望能直接在本页面查看详细信息,我们也已经实现了这一功能。
关于数据展示与更新的技术细节,我们采用了webapi提供数据的方式,将数据的请求和展示分开进行,使得各终端可以方便地调用数据。考虑到实时访问招聘网站会有一定的时间消耗,但信息更新并不频繁,我们决定在webapi中使用缓存机制。使用Strathweb.CacheOutput.WebApi2OutputCache包,可以轻松实现数据的缓存。例如,你可以通过安装Strathweb的缓存包并编写示例代码,轻松实现数据的缓存和展示。我们的WebAPI测试链接是:[
接下来,让我们聊聊响应式设计。响应式布局是现代网页设计的热门话题。在实现过程中,我们遇到了如何在不同设备上实现相同内容的不同展示效果的问题。比如,在PC端和移动端显示搜索条件时,我们要求PC端一行显示,而移动端两行显示,并且要求左右居中显示。在实现左右居中时,我们尝试使用float、display和position等样式属性。通过不断尝试和调整,最终找到了使用display:table属性的解决方案,它就像我们平时让table居中那样,通过margin:0 auto;来实现居中效果。我们也使用了clearfix来防止float引起的“坍塌”效果。这些前端技巧虽然有时让人困惑,但通过记录和总结,我们可以更好地理解和应用它们。
后端处理,根据URL请求获取详细信息
注释说明:根据传入的URL和类型,返回详细信息
```csharp
public string GetUrlInfo(string url, DataType type)
{
var ulS = string.Empty;
switch (type)
{
case DataType.智联招聘:
// 处理“gzip”不是受支持的编码名问题,并加载网页内容
htmlWeb.PreRequestHandler handler = / 具体处理gzip的代码 /;
htmlWeb.PreRequest += handler;
htmlWeb.OverrideEncoding = Encoding.GetEncoding("UTF-8");
HtmlDocument response = htmlWeb.Load(url);
// 抓取并处理网页中的福利、基本信息和职位描述等信息节点
// ...相关代码...
break;
case DataType.猎聘网:
htmlWeb.OverrideEncoding = Encoding.GetEncoding("UTF-8");
response = htmlWeb.Load(url);
// 获取基本信息、职位描述和岗位要求等网页信息节点内容并拼接成字符串返回
ulS = /猎聘网信息处理代码/;
break;
case DataType.前程无忧:
htmlWeb.OverrideEncoding = Encoding.GetEncoding("GBK"); // 设置编码为GBK以处理特殊字符集
response = htmlWeb.Load(url); // 从URL加载网页内容
ulS = /前程无忧信息处理代码/; // 处理网页中的基本信息和职位描述信息节点并拼接成字符串返回,代码省略部分使用占位符表示实际处理逻辑。 break; case DataType.拉勾网: htmlWeb.OverrideEncoding = Encoding.GetEncoding("UTF-8"); // 设置编码格式 response = htmlWeb.Load(url); // 从URL加载网页内容 ulS = /拉勾网信息处理代码/; // 处理拉勾网的招聘信息信息节点并拼接成字符串返回,代码省略部分使用占位符表示实际处理逻辑。 break; } return ulS.ToJson(); // 返回处理后的字符串并以JSON格式输出 }
```
注释说明:前端发起请求,加载招聘信息的详细信息。
```javascript
if ($(obj).next().hasClass("dataInfo")) { // 如果已有详细信息展示框,则只做显示隐藏的切换操作。$(obj).next().toggle(); } else { // 若无信息展示框则提示正在加载状态$(obj).after("正在加载..."); // 显示提示信息 $.ajax({ // 使用AJAX发起请求 url: apiHref + "/api/HiJob?url=" + url, data: null, beforeSend: function (XHR) { }, success: function (data) { $(obj).next(".dataInfo").html(eval(data.data)); // 使用服务器返回的数据替换提示信息 }, dataType: "json" }); } 增加了拉勾网的数据处理逻辑:在前端发起请求时,后端会根据不同的招聘网站类型(如智联招聘、猎聘网等)进行不同的信息抓取和处理逻辑。对于拉勾网的数据处理逻辑也进行了相应的扩展和修改,确保能够正确获取并展示招聘信息。这样前端可以根据后端返回的数据进行展示,用户可以看到不同招聘网站的详细信息。
其他网站多采用直接链接获取信息的传统方式,而拉勾网却独树一帜。它通过一系列独特的流程:请求、页面加载、ajax异步请求详情,并最终将所需数据追加到页面。正是这个“异步”特性,让一些同学感到困惑,纷纷向我询问为何无法成功获取拉勾的数据。今天,我就为大家统一解析一下。
当你访问拉勾网的职位列表页面,如通过浏览器输入网址:
这个地址是:
模拟的post请求过程如下:
创建一个StringContent对象,并设置相关的内容参数。这里的内容参数包括:"first=true"、"pn"的值以及"kd"的值。设置Content-Type为"application/x-www-form-urlencoded",并添加"X-Requested-With"头信息,值为"XMLHttpRequest"。
接着,创建一个HttpClient对象,并使用该对象发起post请求。请求的Uri为上述获取数据的接口地址,传递的参数为之前创建的StringContent对象。发起请求后,会得到一个HttpResponseMessage对象,其中包含了响应的数据。
然后,读取响应的字符串内容,并使用JavaScriptSerializer进行反序列化。因为拉勾返回的数据是json格式的,我们需要将其转化为C对象(假设为LagouInfo)。但需要注意的是,并非所有的数据都是我们所需要的,因此我们需要进行序列化后筛选出自己需要的数据。
想象一下,我们正在处理一个关于招聘信息的庞大数据流。在这股数据流中,有一个名为“LagouInfo”的类,它如同一个信息集合站,收纳了各种关键信息代码、内容、消息等。当你深入了解它的内部构造时,你会发现它包含许多子类别,如“Ccontent”和“Cresult”,它们各自承载着特定的数据片段。
让我们探索“LagouInfo”这个大类。它就像是一个信息枢纽,连接着各个关键信息节点。其中包括了代码(code)、内容(content)、消息(msg)等重要属性。每一个属性都有其独特的含义和用途。例如,“content”属性中就包含了招聘信息的详细内容,如当前页码(currentPageNo)、是否有下一页或上一页(hasNextPage、hasPreviousPage)等。“LagouInfo”还包括请求ID(requestId)、重提交令牌(resubmitToken)、是否成功(success)等关键信息。每一个细节都被精准地编码和存储,等待被解析和解读。
接下来是“Ccontent”类,它承载着招聘信息的详细内容页设置。从页码到结果列表,再到总页数等信息都被它巧妙地组织在一起。特别是它的“result”属性,更是承载了招聘职位的详细信息,如职位名称、公司标识等关键信息都被一一列出。这些信息如同招聘信息的DNA序列,为我们提供了丰富的数据内容。
最后是“Cresult”类,它如同一本开放的招聘职位百科全书。包含了诸如职位名称(positionName)、城市(city)、公司标识列表(companyLabelList)等关键信息。还有诸如薪资(salary)、职位优势(positionAdvantage)等细节信息。这些信息如同一幅细致的招聘全景图,为我们提供了丰富而详细的职位信息数据。通过组装这些所需的数据片段,我们可以轻松获取到我们想要的信息内容。
关于选择区域增加的需求
起初,出于考虑简便,我只选择了几个热门的城市进行展示。很快就有许多声音反馈,为什么某些特定的地区或城市没有涵盖在内?对此,我深感抱歉,并深感感激大家的反馈和建议。既然大家的呼声如此高涨,那么我决定采纳大家的意见,将更多的地区和城市纳入选择范围。
关于增加选择区域的技术难度
实际上,增加选择区域的技术难度并不高。这更像是一项繁琐的体力工作,而非技术挑战。由于每个招聘网站的地区编码都是独特的,我需要深入到各个网站逐一进行筛选和提取。这个过程虽然繁琐,但为了给大家提供更全面、更精准的招聘信息,这一切都是值得的。
数据处理流程解析
当接收到新的招聘数据(假设为 JPostData)时,我会首先进行空值检查。如果数据为空或者其中的某些字段为空(如 content 或 result),那么我会直接返回,避免进一步处理可能导致的问题。接着,我会遍历每一条招聘信息(对于 JPostData.content.result 中的每一个元素)。对于每一个元素,我会提取相关信息(如职位名称、公司信息、城市等),并构建一个 JobInfo 对象。这些对象会被添加到 listJobInfo 列表中,以便后续处理或展示。对于地区的选择问题,我会根据大家的反馈和建议,尽可能地覆盖更多的城市和地区。对于每一个新的地区或城市,我都会深入到对应的招聘网站进行筛选和提取,确保为大家提供最新、最全面的招聘信息。点击更多选项后,你将看到更丰富的地区选择列表,满足你的各种需求。如果你有任何疑问或建议,欢迎随时与我联系。希望这次的更新能满足大家的期待和需求。在繁华的都市之中,我们有一部城市字典,dic_hi,它存储着众多城市的独特信息。以下是这部字典中的精彩条目:
北京,一座历史悠久的城市,其独特的编号是"北京-010000-010"。同样,上海繁华的街道与先进的科技赋予了它"上海-020000-020"的标识。深圳,作为改革开放的前沿阵地,拥有"深圳-040000-050090"的独特身份。广州,以其美食和商贸著称,"广州-030200-050020",是其独特的标识。杭州,美丽的西湖和发达的经济赋予它"杭州-080200-070020"的特质。其他城市如成都、南京、武汉等,都有自己独一无二的标签。这些数字编码背后蕴含着丰富的城市特色和人文风情。
重庆的独特之处在于其山城地貌,"重庆-060000-040",这个编码象征着它的与众不同。郑州作为中原腹地,有着"郑州-170200-150020"的独特魅力。青岛的海滨风光和啤酒文化赋予了它独特的魅力,"青岛-120300-250070",这是它的独特标识。合肥的现代化进程与古老文化交融,"合肥-150200-080020",这是它的独特之处。福州的滨海风光和浓厚的文化底蕴,"福州-110200- 福州",使其独具魅力。济南的泉城特色,"济南-12"。大连的海洋气候和美丽的自然景观赋予了它独特的魅力,"大连"。珠海以其优美的环境和独特的经济政策著称,"珠海"。无锡以其工业发达和江南水乡的美景著称,"无锡"。佛山的陶瓷文化和制造业发达,"佛山"。东莞的制造业和繁华的市井生活,"东莞"。宁波的海洋文化,"宁波"。常州的地域文化和经济发展,"常州"。沈阳的东北特色和重工业基地,"沈阳"。石家庄的历史底蕴和现代发展,"石家庄"。昆明的四季如春,"昆明"。南昌的革命历史与现代发展交相辉映,"南昌"。南宁的热带风情和文化底蕴深厚,"南宁"。哈尔滨的冰雪世界和东北风情,"哈尔滨"。海口的热带海滨风光,"海口"。中山的文化底蕴和现代气息,"中山"。惠州的美丽海滨和经济发展迅速,"惠州"。贵阳的山城风貌和多元文化,"贵阳"。长春的汽车工业和现代化进程,"长春"。太原的历史底蕴和现代工业发展,"太原"。嘉兴的江南水乡特色,"嘉兴"。泰安的泰山文化和历史底蕴深厚,"泰安"。昆山的制造业发达和江南水乡的美景,"昆山"。烟台的海滨风光和文化底蕴深厚,"烟台"。兰州的西北风情和现代发展,"兰州"。泉州的海洋文化和经济发展迅速,"泉州"。
这部城市字典,dic_hi,如同一本生动的历史书,记录了每个城市的独特魅力和文化特色。每一个编码背后,都蕴含着丰富的故事和人文情感。 |