Пример #1
0
        /// <summary>
        /// 获取猎聘信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByLP(string city, string key, string index)
        {
            var    cityCode = CodesData.GetCityCode(RecruitEnum.猎聘网, city);
            string url      = string.Format("http://www.liepin.com/zhaopin/?key={0}&dqs={1}&curPage={2}", key, cityCode, index);

            using (HttpClient http = new HttpClient())
            {
                var htmlString = await http.GetStringAsync(url);

                HtmlParser htmlParser = new HtmlParser();
                var        jobInfos   = htmlParser.Parse(htmlString)
                                        .QuerySelectorAll("ul.sojob-list li")
                                        .Where(t => t.QuerySelectorAll(".job-info h3 a").FirstOrDefault() != null)
                                        .Select(t => new JobInfo()
                {
                    PositionName  = t.QuerySelectorAll(".job-info h3 a").FirstOrDefault().TextContent,
                    CorporateName = t.QuerySelectorAll(".company-name a").FirstOrDefault().TextContent,
                    Salary        = t.QuerySelectorAll(".text-warning").FirstOrDefault().TextContent,
                    WorkingPlace  = t.QuerySelectorAll(".area").FirstOrDefault().TextContent,
                    ReleaseDate   = t.QuerySelectorAll(".time-info time").FirstOrDefault().TextContent,
                    DetailsUrl    = t.QuerySelectorAll(".job-info h3 a").FirstOrDefault().Attributes.FirstOrDefault(f => f.Name == "href").Value,
                })
                                        .ToList();
                return(jobInfos);
            }
        }
Пример #2
0
        /// <summary>
        /// BOSS直聘信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByBS(string city, string key, string index)
        {
            var    cityCode = CodesData.GetCityCode(RecruitEnum.BOSS, city);
            string url      = string.Format("http://www.zhipin.com/c{0}/h_{0}/?query={1}&page={2}", cityCode, key, index);

            using (HttpClient http = new HttpClient())
            {
                var htmlString = await http.GetStringAsync(url);

                HtmlParser htmlParser = new HtmlParser();
                var        jobInfos   = htmlParser.Parse(htmlString)
                                        .QuerySelectorAll(".job-list ul li")
                                        .Where(t => t.QuerySelectorAll(".info-primary h3").FirstOrDefault() != null)
                                        .Select(t => new JobInfo()
                {
                    PositionName  = t.QuerySelectorAll(".info-primary h3").FirstOrDefault().TextContent,
                    CorporateName = t.QuerySelectorAll(".company-text h3").FirstOrDefault().TextContent,
                    Salary        = t.QuerySelectorAll(".info-primary h3 .red").FirstOrDefault().TextContent,
                    WorkingPlace  = t.QuerySelectorAll(".info-primary p").FirstOrDefault().TextContent,
                    ReleaseDate   = t.QuerySelectorAll(".job-time .time").FirstOrDefault().TextContent,
                    DetailsUrl    = "http://www.zhipin.com" + t.QuerySelectorAll("a").FirstOrDefault().Attributes.FirstOrDefault(f => f.Name == "href").Value,
                })
                                        .ToList();
                return(jobInfos);
            }
        }
Пример #3
0
        /// <summary>
        /// 获取智联信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByZL(string city, string key, string index)
        {
            var    cityCode = CodesData.GetCityCode(RecruitEnum.智联招聘, city);
            string url      = string.Format("http://sou.zhaopin.com/jobs/searchresult.ashx?jl={0}&kw={1}&p={2}", cityCode, key, index);

            using (HttpClient http = new HttpClient())
            {
                var htmlString = await http.GetStringAsync(url);

                HtmlParser htmlParser = new HtmlParser();
                var        jobInfos   = htmlParser.Parse(htmlString)
                                        .QuerySelectorAll(".newlist_list_content table")
                                        .Where(t => t.QuerySelectorAll(".zwmc a").FirstOrDefault() != null)
                                        .Select(t => new JobInfo()
                {
                    PositionName  = t.QuerySelectorAll(".zwmc a").FirstOrDefault().TextContent,
                    CorporateName = t.QuerySelectorAll(".gsmc a").FirstOrDefault().TextContent,
                    Salary        = t.QuerySelectorAll(".zwyx").FirstOrDefault().TextContent,
                    WorkingPlace  = t.QuerySelectorAll(".gzdd").FirstOrDefault().TextContent,
                    ReleaseDate   = t.QuerySelectorAll(".gxsj span").FirstOrDefault().TextContent,
                    DetailsUrl    = t.QuerySelectorAll(".zwmc a").FirstOrDefault().Attributes.FirstOrDefault(f => f.Name == "href").Value,
                })
                                        .ToList();
                return(jobInfos);
            }
        }
Пример #4
0
        /// <summary>
        /// 获取前程信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByQC(string city, string key, string index)
        {
            var    cityCode = CodesData.GetCityCode(RecruitEnum.前程无忧, city);
            string url      = string.Format("http://search.51job.com/jobsearch/search_result.php?jobarea={0}&keyword={1}&curr_page={2}", cityCode, key, index);

            using (HttpClient http = new HttpClient())
            {
                var htmlBytes = await http.GetByteArrayAsync(url);

                //【注意】使用GBK需要 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//注册编码提供程序
                var        htmlString = Encoding.GetEncoding("GBK").GetString(htmlBytes);
                HtmlParser htmlParser = new HtmlParser();
                var        jobInfos   = (await htmlParser.ParseAsync(htmlString))
                                        .QuerySelectorAll(".dw_table div.el")
                                        .Where(t => t.QuerySelectorAll(".t1 span a").FirstOrDefault() != null)
                                        .Select(t => new JobInfo()
                {
                    PositionName  = t.QuerySelectorAll(".t1 span a").FirstOrDefault().TextContent,
                    CorporateName = t.QuerySelectorAll(".t2 a").FirstOrDefault().TextContent,
                    Salary        = t.QuerySelectorAll(".t3").FirstOrDefault().TextContent,
                    WorkingPlace  = t.QuerySelectorAll(".t4").FirstOrDefault().TextContent,
                    ReleaseDate   = t.QuerySelectorAll(".t5").FirstOrDefault().TextContent,
                    DetailsUrl    = t.QuerySelectorAll(".t1 span a").FirstOrDefault().Attributes.FirstOrDefault(f => f.Name == "href").Value,
                })
                                        .ToList();
                return(jobInfos);
            }
        }
Пример #5
0
        public async Task <BossTokenParamDto> GetBossTokenParamAsync(string city, string key, int index)
        {
            var cityCode = CodesData.GetCityCode(RecruitEnum.BOSS, city);
            var url      = $"https://www.zhipin.com/c{cityCode}/?query={key}&page={index}&ka=page-{index}";
            var handler  = new HttpClientHandler
            {
                AllowAutoRedirect = true,
                UseCookies        = true
            };

            using var client = new HttpClient(handler);
            var httpResponseMessage = await client.GetAsync(url);

            var requestUri          = httpResponseMessage.RequestMessage.RequestUri;
            var nameValueCollection = System.Web.HttpUtility.ParseQueryString(requestUri.Query);
            var seed     = nameValueCollection.Get("seed");
            var ts       = nameValueCollection.Get("ts");
            var fileName = nameValueCollection.Get("name");
            var filePath = requestUri.AbsoluteUri.Split("?")[0].Replace("security-check.html", $"security-js/{fileName}.js");

            return(new BossTokenParamDto
            {
                Seed = seed,
                Ts = ts,
                FileName = fileName,
                FilePath = filePath
            });
        }
Пример #6
0
        /// <summary>
        /// 获取猎聘信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByLP(string city, string key, int index)
        {
            var cache = GetCacheObject();
            var data  = cache.GetData();

            if (data != null)
            {
                return(data);
            }

            var cityCode = CodesData.GetCityCode(RecruitEnum.猎聘网, city);
            var url      = $"https://www.liepin.com/zhaopin/?key={key}&dqs={cityCode}&curPage={index}";

            using var http = new HttpClient();
            var htmlString = await http.GetStringAsync(url);

            var htmlParser = new HtmlParser();
            var document   = await htmlParser.ParseDocumentAsync(htmlString);

            var jobInfos = document.QuerySelectorAll("ul.sojob-list li")
                           .Where(t => t.QuerySelectorAll(".job-info h3 a").FirstOrDefault() != null)
                           .Select(t => new JobInfo()
            {
                PositionName  = t.QuerySelectorAll(".job-info h3 a").FirstOrDefault().TextContent,
                CorporateName = t.QuerySelectorAll(".company-name a").FirstOrDefault().TextContent,
                Salary        = t.QuerySelectorAll(".text-warning").FirstOrDefault().TextContent,
                WorkingPlace  = t.QuerySelectorAll(".area").FirstOrDefault().TextContent,
                ReleaseDate   = t.QuerySelectorAll(".time-info time").FirstOrDefault().TextContent,
                DetailsUrl    = t.QuerySelectorAll(".job-info h3 a").FirstOrDefault().Attributes.FirstOrDefault(f => f.Name == "href").Value,
            })
                           .ToList();

            cache.AddData(jobInfos);
            return(jobInfos);
        }
Пример #7
0
        /// <summary>
        /// BOSS直聘信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByBS(string city, string key, int index, string token)
        {
            if (index <= 0)
            {
                index = 1;
            }
            var cache = GetCacheObject(20);
            var data  = cache.GetData();

            if (data != null)
            {
                return(data);
            }

            var cityCode = CodesData.GetCityCode(RecruitEnum.BOSS, city);
            var url      = $"https://www.zhipin.com/c{cityCode}/?query={key}&page={index}&ka=page-{index}";

            using var client = new HttpClient();
            var cookie = $"__zp_stoken__={token}";

            client.DefaultRequestHeaders.Add("Cookie", cookie);
            var htmlString = await client.GetStringAsync(url);

            var htmlParser = new HtmlParser();
            var document   = await htmlParser.ParseDocumentAsync(htmlString);

            var jobInfos = document.QuerySelectorAll(".job-list ul li")
                           .Where(t => t.QuerySelectorAll(".info-primary h3").FirstOrDefault() != null)
                           .Select(t => new JobInfo()
            {
                PositionName  = t.QuerySelectorAll(".info-primary h3").FirstOrDefault().TextContent,
                CorporateName = t.QuerySelectorAll(".company-text h3").FirstOrDefault().TextContent,
                Salary        = t.QuerySelectorAll(".info-primary h3 .red").FirstOrDefault().TextContent,
                WorkingPlace  = t.QuerySelectorAll(".info-primary p").FirstOrDefault().TextContent,
                ReleaseDate   = t.QuerySelectorAll(".job-time .time").FirstOrDefault().TextContent,
                DetailsUrl    = "http://www.zhipin.com" + t.QuerySelectorAll("a").FirstOrDefault().Attributes.FirstOrDefault(f => f.Name == "href").Value,
            })
                           .ToList();

            cache.AddData(jobInfos);//添加缓存
            return(jobInfos);
        }
Пример #8
0
        /// <summary>
        /// 获取智联信息(简要信息)
        /// </summary>
        /// <param name="city"></param>
        /// <param name="key"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public async Task <List <JobInfo> > GetJobsByZhiL(string city, string key, int index)
        {
            var cache = GetCacheObject();
            var data  = cache.GetData();

            if (data != null)
            {
                return(data);
            }

            var          cityCode = CodesData.GetCityCode(RecruitEnum.智联招聘, city);
            const int    pageSize = 90;
            var          start    = (index - 1) * pageSize;
            const string url      = "https://fe-api.zhaopin.com/c/i/sou?";
            var          handler  = new HttpClientHandler
            {
                AllowAutoRedirect = false,
                UseCookies        = false,
            };
            var value = new
            {
                start,
                pageSize,
                cityId         = cityCode,
                salary         = "0,0",
                workExperience = -1,
                education      = -1,
                companyType    = -1,
                employmentType = -1,
                jobWelfareTag  = -1,
                sortType       = "publish",
                kw             = key,
                kt             = 3
            };

            using var http = new HttpClient(handler);
            http.DefaultRequestHeaders.Add("origin", "https://sou.zhaopin.com");
            http.DefaultRequestHeaders.Add("referer", $"https://sou.zhaopin.com/?jl={cityCode}&kw={key}&kt=3");
            http.DefaultRequestHeaders.Add("sec-fetch-dest", "empty");
            http.DefaultRequestHeaders.Add("sec-fetch-mode", "cors");
            http.DefaultRequestHeaders.Add("sec-fetch-site", "same-site");
            var formatter = new JsonMediaTypeFormatter();
            var mediaType = MediaTypeConstants.ApplicationJsonMediaType;
            var content   = await formatter.SerializeAsync(value);

            var responseMessage = await http.PostAsync(url, content, formatter, mediaType, CancellationToken.None);

            responseMessage.EnsureSuccessStatusCode();
            var htmlString = await responseMessage.Content.ReadAsStringAsync();

            var zlResponse = JsonConvert.DeserializeObject <ZlResponse <ZlSouResponse> >(htmlString);
            var jobInfos   = zlResponse?.Data?.Results?.Select(t => new JobInfo
            {
                PositionName  = t.JobName,
                CorporateName = t.Company.Name,
                Salary        = t.Salary,
                WorkingPlace  = $"{t.City.Display}{(string.IsNullOrEmpty(t.BusinessArea) ? string.Empty : "-" + t.BusinessArea)}",
                ReleaseDate   = t.UpdateDate,
                DetailsUrl    = t.PositionURL,
            }).ToList();

            cache.AddData(jobInfos);
            return(jobInfos);
        }