亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

各大招聘網站信息實時查詢瀏覽【二】

2019-11-14 15:44:29
字體:
來源:轉載
供稿:網友

前言

前面寫了《各大招聘網站信息實時查詢瀏覽》,關注的朋友還真不少。各種意見的提,我也覺得意見挺好的,也就一一采納了。

有朋友說,希望能在手機端訪問。好,采納。有朋友說,選擇區域太少了。好,我加上。有朋友說,希望能在本頁面查看詳情。ok,我同意。

額,差不多就這些改動了。

效果圖

不想往下看的可以直接:演示地址  源碼下載 

pc:效果圖     移動端:效果圖

使用webapi提供數據

為什么要用webapi提供數據?

  • 數據部分和顯示部分分離
  • 可以各終端調用數據展示

因為我這里請求的時候,是實時訪問的招聘網站,所以請求過程要耗費一定的時間。但是,信息的更新并不頻繁。我們可以在webapi中使用緩存。

在guget命令行執行 Install-Package Strathweb.CacheOutput.WebApi2OutputCache 。

示例代碼:

[CacheOutput(ClientTimeSpan = 60, ServerTimeSpan = 60)]public IEnumerable<string> Get(){     return new string[] { "str1", "str2" };}

WebAPI 測試鏈接:http://hi.haojima.net/SwaggerUI/

響應式

什么是響應式? 請戳。

在做響應式布局的時候,還是遇到了點小問題的。

如:

pc端的搜索條件所在的div 顯示效果:

在移動端的顯示效果:

要求:pc端一行顯示,移動端兩行顯示。且左右居中顯示。

問題就出在左右居中。首先,pc端的顯示。兩個div一行顯示,我們一般都是用樣式 float: left; ??墒?,我發現float了以后不好居中了啊??紤]這用個東西包起來,再居中。具有包裹性的:無非就是: float: left;  display:table;  position:absolute 。float排除,然后table的顯示方式好使。就像我們平時讓table居中那樣。 margin:0 auto; 

測試代碼:

<style type="text/CSS">        .clearfix {            overflow: auto;            _height: 1%;        }</style><div class="clearfix" style="display:table;margin:0 auto; border: 1px dashed #ff0000">    <div style="float: left; border: 1px solid #ff0000">div1</div>    <div style="float: left; border: 1px solid #ff0000; ">div2</div></div>

 

注意:clearfix 用來防止使用了 float 而引起的”坍塌“效果。

pc端搞定了,那移動端直接去掉 float  再顯示就ok了。

(前端的東西,我也是知其然不知其所以然。什么居中、”坍塌“、clearfix等 也不知道為什么要這么用。所以博文記錄下,方便下次自己翻閱。)

詳細信息顯示

雖然列表中超鏈接到詳情頁面。但是,如果我們可以直接在本頁面查看到詳情豈不是更加的方便。我們做的本來就是為了更加方便的瀏覽招聘信息。

說做就做。首先,我們的列表已經有了超鏈接。我們在點擊行的時候,發送請求到后臺。取得詳細信息,然后在頁面顯示。就這么簡單。

后臺獲取詳細信息:

#region 根據url請求,返回詳細信息/// <summary>/// 根據url請求,返回詳細信息/// </summary>/// <param name="url"></param>/// <param name="type"></param>/// <returns></returns>public string GetUrlInfo(string url, DataType type)        {            var ulS = string.Empty;            switch (type)            {                case DataType.智聯招聘:                    #region 問題:“gzip”不是受支持的編碼名 的處理方法  http://www.49028c.com/soundcode/p/3785152.html                    HtmlAgilityPack.HtmlWeb.PReRequestHandler handler = delegate(HttpWebRequest request)                               {                                   request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";                                   request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;                                   request.CookieContainer = new System.Net.CookieContainer();                                   return true;                               };                    htmlWeb.PreRequest += handler;                    #endregion                    htmlWeb.OverrideEncoding = Encoding.GetEncoding("UTF-8");                    HtmlAgilityPack.HtmlDocument response = htmlWeb.Load(url);                    var fuli = response.DocumentNode.SelectNodes("/html/body/div[3]/div[1]/div[1]/div");                    var jiben = response.DocumentNode.SelectNodes("/html/body/div[4]/div[1]/ul");                    var miaoshu = response.DocumentNode.SelectNodes("/html/body/div[4]/div[1]/div[1]/div/div[1]");                    if (fuli != null && fuli.Count >= 1 && !string.IsNullOrEmpty(fuli[0].InnerText.Trim()))                        ulS += "<h3>福利誘惑:</h3>" + fuli[0].InnerText;                    if (jiben != null && jiben.Count >= 1 && !string.IsNullOrEmpty(jiben[0].InnerText.Trim()))                        ulS += "<h3>基本信息:</h3>" + jiben[0].InnerText;                    if (miaoshu != null && miaoshu.Count >= 1 && !string.IsNullOrEmpty(miaoshu[0].InnerText.Trim()))                        ulS += "<h3>職位描述:</h3>" + miaoshu[0].InnerText;                    break;                case DataType.獵聘網:                    htmlWeb.OverrideEncoding = Encoding.GetEncoding("UTF-8");                    response = htmlWeb.Load(url);                    //--基本信息                    var jbinfo = response.DocumentNode.SelectNodes("//*[@id='job-view-enterprise']/div[1]/div[1]/div[1]/div[3]/div") ??                          response.DocumentNode.SelectNodes("//*[@id='job-hunter']/div[1]/div[1]/div[1]/div[3]/div");                    //職位描述                    var selectNodes = response.DocumentNode.SelectNodes("//*[@id='job-hunter']/div[1]/div[1]/div[1]/div[4]")                        ?? response.DocumentNode.SelectNodes("//*[@id='job-view-enterprise']/div[1]/div[1]/div[1]/div[4]");                    //崗位要求                                        var ganwei = response.DocumentNode.SelectNodes("//*[@id='job-hunter']/div[1]/div[1]/div[1]/div[5]/div")                      ?? response.DocumentNode.SelectNodes("//*[@id='job-view-enterprise']/div[1]/div[1]/div[1]/div[5]/div");                    ulS = "<h3>基本信息:</h3>" + jbinfo[0].InnerText +                          "<h3>職位描述:</h3>" + selectNodes[0].InnerText +                          "<h3>崗位要求:</h3>" + ganwei[0].InnerText;                    break;                case DataType.前程無憂:                    htmlWeb.OverrideEncoding = Encoding.GetEncoding("GBK");                    response = htmlWeb.Load(url);                    //--                    ulS = "<h3>基本信息:</h3>" + response.DocumentNode.SelectNodes("/html/body/div[3]/div/div[2]/table[1]/tr[3]/td[1]")[0].InnerText +                          "<h3>職位描述:</h3>" + response.DocumentNode.SelectNodes("/html/body/div[3]/div/div[2]/div[1]/div[2]/div/table")[0].InnerText;                    break;                case DataType.拉勾網:                    htmlWeb.OverrideEncoding = Encoding.GetEncoding("UTF-8");                    response = htmlWeb.Load(url);                    ulS = "<h3>基本信息:</h3>" + response.DocumentNode.SelectNodes("//*[@id='container']/div[1]/div[1]/dl/dd[1]")[0].InnerText +                          "<h3>職位描述:</h3>" + response.DocumentNode.SelectNodes("//*[@id='container']/div[1]/div[1]/dl/dd[2]")[0].InnerText;                    break;            }            return ulS.ToJson();        }#endregion
View Code

 

前臺信息加載:

if ($(obj).next().hasClass("dataInfo"))    $(obj).next().toggle();//如果已有詳細信息,則只做顯示隱藏的切換else    $(obj).after("<div class='dataInfo'>正在加載...</div>");//否則提示“正在加載”$.Ajax({//發起請求    url: apiHref + "/api/HiJob?url=" + url,    data: null,    beforeSend: function (XHR) {    },    success: function (data) {        $(obj).next(".dataInfo").html(eval(data.data));//用內容替換提示信息    },    dateType: "json"});

 

新增拉勾網的數據

我后期又加了“拉勾”網的招聘信息。其他的網站都是直接鏈接,取信息。而偏偏拉勾就是不同。它是,請求->頁面加載->ajax異步請求詳情->追加到頁面。然而,就因為這個異步,好幾個同學就搞不定了。問我,拉勾的數據為什么取不到。在這里就統一分析下吧。

請求如:http://www.lagou.com/jobs/list_.net?city=上海  在瀏覽器F12監控。

我們可以看到信息列表數據是從http://www.lagou.com/jobs/positionAjax.json?city=上海地址,通過ajax的post請求取得的。

所以,我們后臺模擬一個post請求就完事了。

StringContent fromurlcontent = new StringContent("first=true&pn=" + pn + "&kd=" + kd);fromurlcontent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");       fromurlcontent.Headers.Add("X-Requested-With", "xmlHttpRequest");                    HttpClient httpclient = new HttpClient();HttpResponseMessage responseMsg = httpclient.PostAsync(new Uri(url), fromurlcontent).Result;//發起post請求var result = responseMsg.Content.ReadAsStringAsync().Result;javaScriptSerializer _jsSerializer = new JavascriptSerializer();LagouInfo JPostData = _jsSerializer.Deserialize<LagouInfo>(result);

 

注意了,我們得到數據之后。還進行的反序列化。因為數據是json格式的。但,不是所有數據都是我們想要的。所以進行序列化,然后只取我們想要的數據。(當然,序列化類,是我對著json數據一個個摳出來,寫的類屬性)

序列化類:

public class LagouInfo    {        public string code;        public Ccontent content;        public string msg;        public string requestId;        public string resubmitToken;        public string success;    }public class Ccontent    {        public string currentPageNo;        public string hasNextPage;        public string haspreviousPage;        public string pageNo;        public string pageSize;        public List<Cresult> result;        public string start;        public string totalCount;        public string totalPageCount;    }public class Cresult    {        public string adWord;        public string adjustScore;        public string city;        public string companyId;        public List<string> companyLabelList;        public string companyLogo;        public string companyName;        public string companyShortName;        public string companySize;        public string countAdjusted;        public string createTime;        public string createTimeSort;        public string education;        public string financeStage;        public string formatCreateTime;        public string haveDeliver;        public string industryField;        public string jobNature;        public string leaderName;        public string orderBy;        public string positionAdvantage;        public string positionFirstType;        public string positionId;        public string positionName;        public string positionType;        public string positonTypesMap;        public string randomScore;        public string relScore;        public string salary;        public string score;        public string searchScore;        public string showOrder;        public string totalCount;        public string workYear;    }
View Code

 

然后,接著組裝自己想要的數據。

if (JPostData == null || JPostData.content == null || JPostData.content.result == null)    return;for (int i = 0; i < JPostData.content.result.Count; i++){    var item = JPostData.content.result[i];    string titleName, infourl, company, city, date, salary, salary_em, source;    titleName = item.positionName;    infourl = "http://www.lagou.com/jobs/" + item.positionId + ".html";    company = item.companyShortName;    city = item.city;    date = DateTime.Parse(item.createTime).ToString("yyyy-MM-dd");    salary = "月薪"; //item.SelectSingleNode(xpath + "/td[@class='gsmc']/a").InnerText;    salary_em = item.salary;    source = "拉勾網";    listJobInfo.Add(        new JobInfo(){                          city = city,                          company = company,                          date = date,                          info_url = infourl,                          salary = salary,                          salary_em = salary_em,                          titleName = titleName,                          source = source                      });}

 

增加選擇區域

剛開始的時候,只添加了幾個熱門的城市(也是因為偷懶)。然后,很多同學就開始不依了,為什么沒有“**”。大哥,能不能加上“**”。

既然大家有興趣,那我一次性都加上吧。

點擊更多:

說實在的,這個增加選擇區域沒有任何技術含量。純粹的一個體力活。

因為每個網站的地區對于的地區編碼都是不一樣的。所以,我就需要到各個網站一個個的摳。

如:

摳完后:(string[0]:智聯/拉勾 string[1]:前程 string[2]:獵聘

dic_hi.Add("北京", new string[] { "北京", "010000", "010" });dic_hi.Add("上海", new string[] { "上海", "020000", "020" });dic_hi.Add("深圳", new string[] { "深圳", "040000", "050090" });dic_hi.Add("廣州", new string[] { "廣州", "030200", "050020" });dic_hi.Add("杭州", new string[] { "杭州", "080200", "070020" });dic_hi.Add("成都", new string[] { "成都", "090200", "280020" });dic_hi.Add("南京", new string[] { "南京", "070200", "060020" });dic_hi.Add("武漢", new string[] { "武漢", "180200", "170020" });dic_hi.Add("西安", new string[] { "西安", "200200", "270020" });dic_hi.Add("廈門", new string[] { "廈門", "110300", "090040" });dic_hi.Add("長沙", new string[] { "長沙", "190200", "180020" });dic_hi.Add("蘇州", new string[] { "蘇州", "070300", "060080" });dic_hi.Add("天津", new string[] { "天津", "050000", "030" });              dic_hi.Add("重慶", new string[] { "重慶", "060000", "040" });dic_hi.Add("鄭州", new string[] { "鄭州", "170200", "150020" });dic_hi.Add("青島", new string[] { "青島", "120300", "250070" });dic_hi.Add("合肥", new string[] { "合肥", "150200", "080020" });dic_hi.Add("福州", new string[] { "福州", "110200", "090020" });dic_hi.Add("濟南", new string[] { "濟南", "120200", "250020" });dic_hi.Add("大連", new string[] { "大連", "230300", "210040" });dic_hi.Add("珠海", new string[] { "珠海", "030500", "050140" });dic_hi.Add("無錫", new string[] { "無錫", "070400", "060100" });dic_hi.Add("佛山", new string[] { "佛山", "030600", "050050" });dic_hi.Add("東莞", new string[] { "東莞", "030800", "050040" });dic_hi.Add("寧波", new string[] { "寧波", "080300", "070030" });dic_hi.Add("常州", new string[] { "常州", "070500", "060040" });dic_hi.Add("沈陽", new string[] { "沈陽", "230200", "210020" });dic_hi.Add("石家莊", new string[] { "石家莊", "160200", "140020" });dic_hi.Add("昆明", new string[] { "昆明", "250200", "310020" });dic_hi.Add("南昌", new string[] { "南昌", "130200", "200020" });dic_hi.Add("南寧", new string[] { "南寧", "140200", "110020" });dic_hi.Add("哈爾濱", new string[] { "哈爾濱", "220200", "160020" });dic_hi.Add("???/span>", new string[] { "???/span>", "100200", "130020" });dic_hi.Add("中山", new string[] { "中山", "030700", "050130" });dic_hi.Add("惠州", new string[] { "惠州", "030300", "050060" });dic_hi.Add("貴陽", new string[] { "貴陽", "260200", "120020" });dic_hi.Add("長春", new string[] { "長春", "240200", "190020" });dic_hi.Add("太原", new string[] { "太原", "210200", "260020" });dic_hi.Add("嘉興", new string[] { "嘉興", "080700", "070090" });dic_hi.Add("泰安", new string[] { "泰安", "121100", "250090" });dic_hi.Add("昆山", new string[] { "昆山", "070600", "060050" });dic_hi.Add("煙臺", new string[] { "煙臺", "120400", "250120" });dic_hi.Add("蘭州", new string[] { "蘭州", "270200", "100020" });dic_hi.Add("泉州", new string[] { "泉州", "110400", "090030" }); 
View Code

總結

和之前那個版本顯示效果區別不大(頁面還是一樣的丑,代碼也還是一樣的丑),不過實現方式完全不一樣了。這陣子學習了MVC和WebAPI的點皮毛知識,也就再次折騰下。

演示地址  源碼下載 ,如果您覺得有用,那就留給腳印吧。演示地址后期可能會變,這篇博文會維護最新鏈接。

轉眼一年又悄悄的過去了,我猜想大家又開始蠢蠢欲動起來了。不過年后跳得應該比較多。不過,個人覺得年后的競爭壓力大得多。

哪位同仁如果有好的工作機會可以私聊我或使勁戳詳情。

工作地點:浦東新區  經驗:五年.net web開發經驗

 

如果您有更好的處理方式,希望不要吝嗇賜教。

本文鏈接:http://www.49028c.com/zhaopei/p/4931518.html 

歡迎上海“程序猿/媛”、"攻城獅"入群:【滬猿】229082941 入群須知

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品中文字幕一区| 黑人巨大精品欧美一区二区一视频| 亚洲电影免费观看高清| 久久不射热爱视频精品| 亚洲精品资源美女情侣酒店| 亚洲综合中文字幕在线观看| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩国产一区中文午夜| 伊人激情综合网| 福利二区91精品bt7086| 日韩a**站在线观看| 亚洲精品乱码久久久久久按摩观| 17婷婷久久www| 国产一区二区三区视频在线观看| 久久精品国产久精国产一老狼| 久久亚洲精品中文字幕冲田杏梨| 亚洲电影成人av99爱色| 久久国产精品久久国产精品| 欧美日韩在线免费观看| 久久99久久亚洲国产| 日韩中文字幕精品| 欧美成人精品激情在线观看| 久久久久久91香蕉国产| 69久久夜色精品国产7777| 一色桃子一区二区| 亚洲欧洲国产一区| 亚洲精品suv精品一区二区| 亚洲一区二区免费在线| 国产精品网红直播| 91免费的视频在线播放| 欧美日韩中文字幕在线视频| 国产mv免费观看入口亚洲| 精品国产鲁一鲁一区二区张丽| 韩国v欧美v日本v亚洲| 国产精品电影久久久久电影网| 国产欧美一区二区白浆黑人| 国产精品美女在线| 亚洲人成电影网站色| 国产ts人妖一区二区三区| 久久精品国产欧美亚洲人人爽| 国产精品色视频| 欧美区在线播放| 日韩精品免费在线播放| 色黄久久久久久| 中文字幕久久久| 97久久久久久| 成人精品久久一区二区三区| 国产精品久久久久久久久久久不卡| 91久久国产精品91久久性色| 日韩色av导航| 97精品视频在线观看| 国产精品中文字幕在线观看| 欧美精品亚州精品| 亚洲视频在线观看| 国产性色av一区二区| 日本午夜在线亚洲.国产| 在线精品国产成人综合| 国产一区二区三区久久精品| 91经典在线视频| 亚洲一区二区免费在线| 成人在线激情视频| 亚洲综合在线中文字幕| 欧美性理论片在线观看片免费| 亚洲一区二区三区成人在线视频精品| 亚洲精品永久免费精品| 日韩欧美极品在线观看| 日韩精品在线免费观看| 成人一区二区电影| 一区二区三区美女xx视频| 一区二区国产精品视频| 色偷偷噜噜噜亚洲男人的天堂| 亚洲精品少妇网址| 日韩在线中文字幕| 97色在线播放视频| 91tv亚洲精品香蕉国产一区7ujn| 亚洲激情视频在线| 欧美成人免费小视频| 97超级碰碰碰久久久| 亚洲欧美日韩一区在线| 欧美高跟鞋交xxxxxhd| 日日骚av一区| 美女久久久久久久久久久| 国产69精品久久久久99| 亚洲第一中文字幕在线观看| 日韩精品一区二区视频| 国产欧美一区二区三区在线| 国产婷婷色综合av蜜臀av| 色综合久久88色综合天天看泰| 亚洲天堂av在线播放| 国产视频精品va久久久久久| 国产成人av网| 久久天天躁狠狠躁夜夜爽蜜月| 91高清免费视频| 亚洲欧美国产制服动漫| 日韩暖暖在线视频| 亚洲三级 欧美三级| 亚洲韩国欧洲国产日产av| 日韩精品中文字幕在线观看| 国产视频亚洲视频| 日本韩国欧美精品大片卡二| 亚洲图中文字幕| 国产精品网址在线| 精品国产乱码久久久久酒店| 久久中文字幕在线视频| 欧美大荫蒂xxx| 亚洲在线免费视频| 在线观看精品自拍私拍| 国产伦精品一区二区三区精品视频| 欧美日韩国产色| 国产一区二区三区在线| 亚洲精品456在线播放狼人| 神马久久桃色视频| 91午夜在线播放| 日韩欧美国产中文字幕| 欧美激情久久久| 久久人人97超碰精品888| 国产综合久久久久| 欧美激情啊啊啊| 日韩精品久久久久久久玫瑰园| 中文字幕亚洲综合久久| 亚洲一区999| 亚洲高清久久久久久| 久久久欧美精品| 欧美日韩另类视频| 亚洲精品电影网站| 成人午夜高潮视频| 蜜臀久久99精品久久久无需会员| 色综合久综合久久综合久鬼88| 91在线观看免费高清完整版在线观看| 久久影视电视剧免费网站清宫辞电视| 日韩欧美国产激情| 韩国v欧美v日本v亚洲| 国产精品男女猛烈高潮激情| 亲子乱一区二区三区电影| 国内精品久久久久影院 日本资源| 欧美激情免费看| 久久777国产线看观看精品| 欧美限制级电影在线观看| 91九色精品视频| 最近中文字幕2019免费| 91免费精品视频| 国产精品久久久久久一区二区| 国产亚洲成精品久久| 国产精品高清在线观看| 国产一区二区三区直播精品电影| 亚洲欧美制服综合另类| 欧美裸体视频网站| 久久精品国产久精国产一老狼| 欧美黑人xxx| 不卡中文字幕av| 性日韩欧美在线视频| 欧美日韩国产中文精品字幕自在自线| 亚洲一区二区三区777| 欧美性69xxxx肥| 欧美色另类天堂2015| 91色琪琪电影亚洲精品久久| 亚洲专区国产精品| 亚洲free性xxxx护士白浆| 欧美午夜精品久久久久久人妖| 日产日韩在线亚洲欧美| 成人两性免费视频| 亚洲成年人在线| 91精品国产高清自在线看超| 久久好看免费视频|