//public static string GetRegions() //{ //} //Возвращает json представляющий список всех доступных населенных пунктов public static string GetCities() { WebQuery avito = new WebQuery(); string regionsHtml = avito.GET("https://www.avito.ru/js/locations?_=bd26ca8"); HtmlDocument document = new HtmlDocument(); document.LoadHtml(regionsHtml); HtmlNodeCollection regionCollection = document.DocumentNode.SelectNodes("//select/option"); List <AvitoRegion> regionsList = new List <AvitoRegion>(); for (int i = 1; i < regionCollection.Count; i++) { regionsList.Add(new AvitoRegion(Convert.ToInt32(regionCollection[i].Attributes[0].Value), regionCollection[i].InnerText)); } List <AvitoCity> Cities = new List <AvitoCity>(); foreach (AvitoRegion reg in regionsList) { string jsonRegionCities = avito.GET("https://www.avito.ru/js/locations?json=true&id=" + reg.id + "&_=bd26ca8"); AvitoCity regionCities = new AvitoCity(); dynamic obj = JsonConvert.DeserializeObject(jsonRegionCities); foreach (var cityJson in obj) { regionCities.id = Convert.ToInt32(cityJson["id"].Value); regionCities.name = cityJson["name"].Value; regionCities.parentId = Convert.ToInt32(cityJson["parentId"].Value); regionCities.metroMap = cityJson["metroMap"].Value; regionCities.namePrepositional = cityJson["namePrepositional"].Value; Cities.Add(regionCities); } } string jsonAllCities = JsonConvert.SerializeObject(Cities); return(jsonAllCities); }
static void Main(string[] args) { WebHeaderCollection Header = new WebHeaderCollection(); Header.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0"); Header.Add(HttpRequestHeader.Accept, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); Header.Add(HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3"); //Header.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); Header.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded"); Header.Add(HttpRequestHeader.Referer, "https://www.google.ru"); WebQuery avito = new WebQuery(); avito.Headers = Header; avito.GET("https://www.avito.ru"); string kvartiry = avito.GET("https://www.avito.ru" + avito.ResponceUri.AbsolutePath + "/" + "kvartiry"); HtmlDocument hiddenFieldsString = new HtmlDocument(); hiddenFieldsString.LoadHtml(kvartiry); NameValueCollection filter = new NameValueCollection(); string sField = hiddenFieldsString.DocumentNode.SelectSingleNode("//input[@name='s']").GetAttributeValue("value", "101"); string tokenValueField = hiddenFieldsString.DocumentNode.SelectSingleNode("//input[@class='js-token']").GetAttributeValue("value", "0"); string tokenNameField = hiddenFieldsString.DocumentNode.SelectSingleNode("//input[@class='js-token']").GetAttributeValue("name", "token[0]"); string sgtdField = hiddenFieldsString.DocumentNode.SelectSingleNode("//input[@name='sgtd']").GetAttributeValue("value", ""); filter.Add("s", sField); //filter.Add(Ke) filter.Add(tokenNameField, tokenValueField); filter.Add("sgtd", sgtdField); filter.Add("category_id", "24"); filter.Add("location_id", "637640");//"641780" filter.Add("name", ""); filter.Add("params[201]", ""); filter.Add("pmin", ""); filter.Add("pmax", ""); filter.Add("bt", "on"); string filt = avito.GetPostBody(filter); string aprtments = avito.POST("https://www.avito.ru/search", filter); Avito av = new Avito(); //av.SetFilter("Квартиры"); av.Query.Headers = Header; string w = av.GetFilterParams(24); av.Filter.Add("category_id", "24"); av.Filter.Add("location_id", "641780"); av.Filter.Add("name", ""); av.Filter.Add("params[201]", ""); av.Filter.Add("pmin", ""); av.Filter.Add("pmax", ""); string filt1 = av.Query.GetPostBody(av.Filter.Params); string aprtments1 = avito.POST("https://www.avito.ru/search", av.Filter.Params); HtmlDocument pages = new HtmlDocument(); pages.LoadHtml(aprtments1); int pageNumber = 0; HtmlNodeCollection maxPageNumber = pages.DocumentNode.SelectNodes("//a[@class='pagination-page']"); pageNumber = maxPageNumber.Count == 0 ? 1 :Convert.ToInt32(Regex.Match(maxPageNumber[maxPageNumber.Count - 1].GetAttributeValue("href", "1"), @"(?<=[\s\S]*?p=)[\s\S]+").Value); string p2 = avito.GET(avito.ResponceUri + "?p=2"); //for (int i=1;i<=) }
public Avito() { Query = new WebQuery(); Filter = new CommonFilter(); }