Page title

Search php r vac

Добавлено: 19/11/2019 13:05 | Обновлено: 19/11/2019 14:25 | Добавил: nick | Просмотры: 12269 Комментарии: 1

В этом материале вы познакомитесь с основами парсинга сайтов с использованием языка программирования С#.

Парсинг HTML сводится к извлечению искомой порции данных из общего набора данных. Существует несколько способов решить задачу поиска извлекаемой порции.

1. Поиск текста с помощью встроенных в класс String методов
Самый быстрый и понятный для новичков в программировании на С# способ.

Представим, что нам нужен только заголовок страницы, который лежит в теге . HTML код будет выглядеть таким образом:

var txtHTML = @""; var txtPrefix = @""; var txtPrefixPosition = txtHTML.IndexOf(txtPrefix, StringComparison.OrdinalIgnoreCase); var txtSuffixPosition = txtHTML.IndexOf(txtSuffix, txtPrefixPosition + txtPrefix.Length, StringComparison.OrdinalIgnoreCase); var txtTitle = txtHTML.Substring( txtPrefixPosition + txtPrefix.Length, txtSuffixPosition - txtPrefixPosition - txtPrefix.Length ); 
public static String FindText(string source, string prefix, string suffix) < var prefixPosition = source.IndexOf(prefix, StringComparison.OrdinalIgnoreCase); var suffixPosition = source.IndexOf(suffix, prefixPosition + prefix.Length, StringComparison.OrdinalIgnoreCase); if ((prefixPosition >= 0) && (suffixPosition >= 0) && (suffixPosition > prefixPosition) && ((prefixPosition + prefix.Length) else < return String.Empty; >> 
var txtTitle = FindText(txtHTML,@""); 

Такой способ хорошо подходит для одиночного поиска и когда искомый текст окружен уникальными последовательностями (в данном случае — тегами ).

2. Поиск текста с помощью регулярных выражений
Предыдущий способ плохо работает, если prefix и suffix имеют сложный вид, или вообще неизвестны, но известна структура искомого текста.

Например, нам нужны все ссылки со страницы. Тогда поиск можно организовать так:

using System.Text.RegularExpressions; using System.Linq; //. //Регулярное выражение для поиска A тега var regexpATag = new Regex(@"]*>[^", RegexOptions.IgnoreCase | RegexOptions.Multiline); //Регулярное выражение для поиска href свойства var regexpHref = new Regex(@"href\s*=\s*[""'](.*?)[""']", RegexOptions.IgnoreCase | RegexOptions.Multiline); var matches = regexpATag.Matches(txtHTML); var links = new List(); foreach (Match match in matches) < var link = regexpHref.Match(match.Value); if (link.Success) links.Add(link.Groups[1].Value); >; //LINQ запрос на сортировку и уникализацию links = links.Distinct().OrderBy(el => el).ToList(); 

В результате выполнения кода в переменной links будет список уникальных ссылок, отсортированных в алфавитном порядке.

Подобный способ подразумевает умение составлять регулярные выражения. Протестировать ваши регулярные выражения удобно на сайте regex101.com.

3. Использование библиотеки HtmlAgilityPack (https://html-agility-pack.net/)
Следующая степень удобства — использование сторонних библиотек, например HtmlAgilityPack. Данная библиотека умеет строить DOM дерево по HTML коду. При этом сам код нужно получить заранее:

using System.Net; using System.IO; //. /// /// Возвращает текст страницы по адресу url /// /// Адрес страницы /// Возвращает текст страницы по адресу url public static string GetPage(string url) < var result = String.Empty; var request = (HttpWebRequest)WebRequest.Create(url); var response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) < var responseStream = response.GetResponseStream(); if (responseStream != null) < StreamReader streamReader; if (response.CharacterSet != null) streamReader = new StreamReader(responseStream, Encoding.GetEncoding(response.CharacterSet)); else streamReader = new StreamReader(responseStream); result = streamReader.ReadToEnd(); streamReader.Close(); >response.Close(); > return result; > 
var txtHTML = GetPage(@"https://joblab.ru/search.php?r=vac&srregion=100&maxThread=100&submit=1"); var doc = new HtmlDocument(); // Создание документа doc.LoadHtml(txtHTML); // Загрузка кода в документ 

Анализируя код, нужно понять:

1) По какому принципу формируются URL страниц со списком вакансий (их обычно несколько).

var baseURL = @"https://joblab.ru/search.php?r=vac&srregion=100&pred=30&maxThread=100&submit=1"; catalogPages.AddRange( Enumerable .Range(2, Convert.ToInt32(lastPageNumber) - 2) .Select(el=> $"&page=") ); 

2) Как узнать номер последней подобной страницы?

(Клик правой кнопкой по элементу в Chrome — просмотреть код) Все кнопки навигации имеют класс «pager», притом последняя из таких кнопок — содержит номер последней страницы

var lastPageNumber = doc.DocumentNode.SelectNodes("//*[@class='pager']").Last().InnerText; 

3) Какого вида ссылки на страницы с данными?

var vacancyPages = new List(); foreach (var catalogPage in catalogPages) < txtHTML = GetPage(catalogPage); // Получение кода страницы doc.LoadHtml(txtHTML); // Загрузка кода в документ vacancyPages.AddRange( //Добавить к vacancyPages список ссылок doc.DocumentNode //Выбрать все ссылки (тут используется XPath запрос) .SelectNodes("//a") //Преобразовать список ссылкок в список их href .Select(el =>el.Attributes["href"].Value) //Фильтр - оставить только ссылки, содержащие "/vac" .Where(el=>el.Contains("/vac")) //Преобразовать относительные ссылки в абсолютные .Select(el=> "https://joblab.ru"+el) //Преобразование в список .ToList() ); > 

4) Открыв страницу с вакансией, подобным образом ищем интересующие поля — название, телефон, email, описания и т.п.

Читайте также:  Php ajax file upload progress

Чтобы не делать множество запросов к серверу, можно получить код страницы однократно, и сохранить его. //Получение HTML кода страниц с товарами

Dictionary pages = new Dictionary(); foreach (var productPage in productPages) < txtHTML = GetPage(productPage); // Получение кода страницы doc.LoadHtml(txtHTML); // Загрузка кода в документ pages[productPage] = txtHTML; >
//Парсинг данных foreach (var page in pages) < doc.LoadHtml(page.Value); // Загрузка кода в документ //ссылка на профиль компании var company = "https://joblab.ru" + doc.DocumentNode .SelectNodes("//a") //Выбрать все ссылки из документа(тут используется XPath запрос) .Select(el =>el.Attributes["href"].Value)//Взять только href свойство .Where(el => el.Contains("/e"))//Отфильтровать по признаку "содержит /e" .FirstOrDefault();//Взять первый //Название организации var companyName = HttpUtility.HtmlDecode ( doc.DocumentNode .SelectNodes("//a")//Выбрать все ссылки из документа .Where(el => el.Attributes["href"].Value.Contains("/e"))//Отфильтровать по признаку "содержит /e" .Select(el=>el.InnerText)//Взять только текст внутри тегов .Aggregate("",(acc,val)=>acc+=val.ToString())//Выдать весь текст ); //Название вакансии var vacancy = FindText(page.Value, "

", "

");//Тут проще всего использовать поиск текста //регион или город var city = FindText(page.Value, @"graytext"">Город

", "").ToString();//Тут проще всего использовать поиск текста // и т.д. >

После парсинга данные сохраняются любым удобным способом. Чаще всего это csv файл. Ниже представлен простейший код для формирования небольшого по размеру csv файла (для больших файлов желательно использовать StreamWriter) в каждом значении кавычки заменяются на двойные кавычки, переводы строк заменяются на пробел и значение обрамляется двойными кавычками. Каждая запись отделяется от другой переводом строки.

Dictionary> data = new Dictionary>(); 

Здесь ключ словаря — url, значение словаря — кортеж из 7 string(хотя тут можно применить и List и массив строк и т.п.)

var csvData = ""; foreach(var row in data) < csvData+= "\"" + row.Key.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item1.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item2.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item3.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item4.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item5.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item6.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\";" + "\"" + row.Value.Item7.Replace("\"", "\"\"").Replace('\n', ' ').Replace('\r', ' ') + "\"\n"; >System.IO.File.WriteAllText("out.csv",csvData,Encoding.UTF8);//запись в файл "out.csv" в кодировке UTF8 

Все эти способы подойдут для парсинга большинства простых сайтов. Напоследок, подскажу как улучшить ваш парсер. Для более сложных случаев, когда содержимое страницы формируется динамически, вышеописанные способы не подойдут, и нужно полноценно эмулировать браузер, используя, например, библиотеку Selenium. Парсить сайт в один поток — довольно медленно. Поэтому распараллеливание парсинга ускорит процесс в разы. И интерфейс программы станет приятнее (не будет ощущения, что программа зависла, пока получает данные).

Многие сайты активно сопротивляются, если заподозрят вас в парсинге, поэтому есть смысл продумать использование прокси-серверов.

Автор материала Григорий Боев

Источник

Как найти подработку?

Многие задают такой вопрос. Всем кажется, что если я найду подработку, то решу все свои проблемы. Но вы начинаете подрабатывать, денег не хватает, а усталость накапливается. Я бы рекомендовал бы начинать делать что-то своими руками. Например, Вам нравится работать с деревом или же делать поделки с вашими детьми. А ведь это все можно продавать. Вот статья о том как продавать ручную работу https://handm.by/kak-prodat-ruchnuyu-rabotu.

Ребенку на рисовании задали сделать открытку ручной работы. Анна почитала статьи как это делается, потренировалась и сделала красивую открытку. Ребенку поставили 5, а наша рукодельница решила попробовать продать ее на портале HandM. Первая работа принесла ей 7 уе, она попробовала сделать еще открытки ручной работы в различных техничках и с применением разных материалов. В итоге сегодня Анна продает более 120 открыток ежемесячно на нашем портале.

Поэтому я бы вам рекомендовал попробовать что-то сделать свое и продать, а не тратить свои силы на простую дешевую работу.

Отец троих детей. Занимаюсь бизнесом на кроссовках более трёх лет. Помогаю начать бизнес. · 9 сент 2020

Среди множества видов подработки могу рекомендовать один из самых простых и доступных видов подработки для каждого — перепродажа кроссовок. Я занимаюсь перепродажей кроссовок в Новосибирске уже более трёх лет и не по наслышке знаю, что на простой перепродаже кроссовок через Авито и Юлу можно зарабатывать от 30.000 до 100.000 рублей фактически в любом городе и возрасте. Читать далее

На многих сайтах по поиску работы в фильтре можно указать, что работа нужна не постоянная. Вот, например, тут — https://www.job-mo.ru/search.php?r=vac&srcategory=27&submit=1 — можно указать, что нужен гибкий график и неполный день.

Биржа услуг полиграфии и дизайна. Сайт для быстрого подбора типографии под любой заказ. · 28 мая 2020 · pagbac.ru

Неплохим подспорьем (а может даже и бизнесом в потенциале) может быть изготовление продукции ручной работы (handmade). Очень часто люди умеют делать руками, такое, от чего у других волосы дыбом встают, но они старательно это обесценивают. Вот тут мы обозревали этот вопрос и приводили краткий гайд по тому, как можно зарабатывать на хенд мейд в области полиграфии и мелких. Читать далее

1. Если ваша профессия позволяет, то вы можете попытаться работать из дома на фрилансе. Для этого попробуйте зарегистрировать на одной из специализированных бирж. 2. Возможно, у вас получится заработать на своем хобби. Подумайте какое из своих увлечений вы можете превратить в дополнительный доход. 3. Для поиска вакансий выбирайте проверенные источники — сайты по поиску. Читать далее

Найти подработку — это один из самых популярных запросов на hh.ru. Но подработка — понятие очень широкое, зачастую разные люди подразумевают под этим словом совершенно разные вещи. Кто-то — работу по совместительству, кто-то — любую временную работу или периодические заработки на разовых заказах, независимо от того, есть ли основная работа. Чтобы быстрее находить то, что нужно, важно сразу определиться с критериями поиска.

Чек-лист вопросов самому себе:

  1. Какой у вас ключевой, самый главный мотив для поиска подработки?
  2. Для вас принципиально, чтобы подработка была по вашей специальности или вы готовы рассматривать и другие предложения?
  3. К какому варианту вы готовы — с очным присутствием на рабочем месте, с разъездным характером работы, только к удалёнке? Или это совсем не имеет значения и вас устроит любой вариант?
  4. Если вы рассматриваете работу с очным присутствием, то сколько времени вы готовы тратить на дорогу? Бывает, что стоит искать только работу рядом с домом или недалеко от места основной работы.
  5. Какой график работы позволяют ваши жизненные обстоятельства?
  6. Вам нужна подработка параллельно с вашей основной работой (учебой) или временно, пока вы без основной работы (в отпуске, в простое, на каникулах)? Или у вас нет основной работы (либо вы планируете ее оставить) и хотите как фрилансер работать с несколькими заказчиками, самостоятельно управляя своей нагрузкой?
  7. Вы хотели бы подработку на длительный срок у одного и того же работодателя или вам удобнее время от времени брать разовые заказы?

В результате вы придете к трем основным критериям поиска:

  1. Любая работа или работа только по вашей специальности;
  2. Тип занятости: постоянная, временная (на какой-то период), фриланс с разовыми проектами;
  3. Условия работы: удобный формат (удаленно или очно, с разъездами или без них) и график работы, удаленность от дома или основной работы.

Всё это поможет вам искать сразу только то, что нужно, отсеивать вакансии и предложения, которые точно не подходят, и подготовиться к вопросам потенциальных работодателей про удобные график и формат работы.

Как искать подработку на hh.ru: 4 способа

На hh.ru есть все типичные варианты подработки — от параллельной работы по совместительству с постоянной занятостью до временных проектов (например, когда нужна работа на летние каникулы) до разовых проектов на фрилансе.

Вариант 1: вам не так уж важно, чтобы подработка была по конкретной специальности, но есть пожелания к типу занятости и условиям работы

Например, вам нужна подработка только на дому. Или только по выходным. Достаточно просто войти на сайт. Если вы заходите с компьютера, то на главной странице сайта сразу увидите раздел «Подработка». Нажмите на него — и откроются разные типы подработок. Выберите тот, который вам больше подходит.

Вариант 2: вас интересует подработка только по вашей специальности

В таком случае ищите по главному критерию — названию профессии или по вашей профобласти. Укажите в фильтрах поиска и другие важные критерии — тип занятости и график работы.

Вариант 3: нужна подработка только на удалёнке

В этом случае отметьте в фильтрах, кроме нужных вам типа занятости и графика работы, еще и удаленную работу.

Вариант 4: для вас главное, чтобы подработка была рядом с домом

Если вы заходите на hh.ru с компьютера, воспользуйтесь опцией «Вакансии на карте».

В мобильном приложении это опция «Вакансии рядом».

Источник

Оцените статью