Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 28, 2015 00:22:59

admon
Зарегистрирован: 2015-04-10
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

#!/usr/bin/python
#coding=utf-8
import gspread, urllib, re
from bs4 import BeautifulSoup
a_pattern = '[0-9]\\s[0-9]*[0-9]\\b вакансий'  # для поиска значения количества вакансий, 
list2 = []
list = ['IT', 'Продажа', 'Образование', 'Начало карьеры', 'Туризм', 'Стажировка', 'Маркетинг']
urllist = ['https://rabota.yandex.ru/search?job_industry=275',
           'https://rabota.yandex.ru/search?job_industry=386',
           'https://rabota.yandex.ru/search?job_industry=106',
           'https://rabota.yandex.ru/search?experience=NO_EXPERIENCE',
           'https://rabota.yandex.ru/search?job_industry=298',
           'https://rabota.yandex.ru/search?text=%D1%81%D1%82%D0%B0%D0%B6%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0',
           'https://rabota.yandex.ru/search?job_industry=420']
#yandex
for items in list:
    for url in urllist:
        f = urllib.urlopen(url)
        soup = BeautifulSoup(f)
        i = soup.find_all('div', 'search-results__heading-content search-results__heading-content_type_vacancies')
        result = re.search(a_pattern, str(i))
        list2.append(result.group(0))   # список с количеством вакансии
print list2
#hh
s_pattern = ["href='?enable_snippets=true&clusters=true&area=2&specialization=14&from=cluster_professionalArea'",
             "href='?enable_snippets=true&clusters=true&area=2&specialization=17&from=cluster_professionalArea'",
             "href='?enable_snippets=true&clusters=true&area=2&specialization=14&from=cluster_professionalArea'",
             "href='?enable_snippets=true&clusters=true&area=2&specialization=15&from=cluster_professionalArea'",
             "href='?enable_snippets=true&clusters=true&area=2&specialization=22&from=cluster_professionalArea'",
             "href='?enable_snippets=true&clusters=true&area=2&employment=probation&from=cluster_employment'"]
j = 0
for items in list:
    j = j + 1
    url = 'http://hh.ru/search/vacancy?clusters=true&enable_snippets=true&area=2'
    f = urllib.urlopen(url)
    soup = BeautifulSoup(f)
    i = soup.find('a', 'href')
В связи с повышением курса доллара и переезда хочется автоматизировать процесс, каждый день сканируются вакансии с ресурсов и записываются в гугл таблицу, пока проблема с регэкспом, а именно:
<div class="search-results__heading-content search-results__heading-content_type_vacancies">5 217 вакансий <span class="where">в Санкт-Петербурге и Ленинградской области</span>
<div class="search-results__heading-filter">в отрасли: IT, интернет, связь, телеком</div></div>
тысячный разряд отделен пробелом, пробовал парсить по поисковым словам, работало, но результат совсем другой, нежели по сферам, заодно спрошу как можно вытянуть из hh сочетание сферы+значение:
<a class="clusters-value" href="?enable_snippets=true&amp;clusters=true&amp;area=2&amp;specialization=17&amp;from=cluster_professionalArea"><span class="clusters-value__name" data-qa="serp__cluster-item-title">Продажи</span>
<span class="clusters-value__count" data-qa="serp__cluster-item-number">9082</span></a>

Отредактировано admon (Авг. 28, 2015 00:24:25)

Офлайн

#2 Авг. 28, 2015 02:38:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

admon
тысячный разряд отделен пробелом
Ты всё равно ищешь по тегу. Нужно просто из содержимого тега удалить всё, кроме цифр. Оставшиеся цифры образуют число.



Отредактировано py.user.next (Авг. 28, 2015 02:38:28)

Офлайн

#3 Авг. 28, 2015 11:59:21

admon
Зарегистрирован: 2015-04-10
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

'^>[^A-Za-zА-Яа-я]\s<$'
Так?

Отредактировано admon (Авг. 28, 2015 11:59:33)

Офлайн

#4 Авг. 28, 2015 12:11:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

>>> import re
>>> 
>>> s = re.sub(r'[^\d]', '', '5 217 вакансий ')
>>> s
'5217'
>>>



Офлайн

#5 Авг. 28, 2015 15:45:26

admon
Зарегистрирован: 2015-04-10
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

с яндексом разобрался, спасибо, с хх как будет?

url = 'http://hh.ru/search/vacancy?clusters=true&enable_snippets=true&area=2'
f = urllib.urlopen(url)
soup = BeautifulSoup(f)
i = soup.find_all('a','?enable_snippets=true&amp;clusters=true&amp;area=2&amp;specialization=14&amp;from=cluster_professionalArea')
print str(i).decode('utf-8').encode('windows-1251')

по тэгам пробовал, но безрезультатно

<a class="clusters-value" href="?enable_snippets=true&amp;clusters=true&amp;area=2&amp;specialization=17&amp;from=cluster_professionalArea"><span class="clusters-value__name" data-qa="serp__cluster-item-title">Продажи</span>
<span class="clusters-value__count" data-qa="serp__cluster-item-number">9082</span></a>

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

Офлайн

#6 Авг. 28, 2015 18:13:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

admon
с яндексом разобрался, спасибо, с хх как будет?
Задача в чём?



Офлайн

#7 Авг. 28, 2015 18:24:42

admon
Зарегистрирован: 2015-04-10
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

http://hh.ru/search/vacancy?clusters=true&enable_snippets=true&area=2
с этой страницы из
<a class="clusters-value" href="?enable_snippets=true&amp;clusters=true&amp;area=2&amp;specialization=17&amp;from=cluster_professionalArea"><span class="clusters-value__name" data-qa="serp__cluster-item-title">Продажи</span>
<span class="clusters-value__count" data-qa="serp__cluster-item-number">9082</span></a>
добыть имена сфер и их значения, список имен содержится в переменной, по href пробовал парсить, но не находило.

Офлайн

#8 Авг. 29, 2015 02:00:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

Сначала найди все названия профобластей.
Они находятся в списке

<ul class="clusters-list" data-qa="serp__cluster-group-item">
и стоят в его элементах
в развёрнутых
<li class="clusters-list__item" data-qa="serp__cluster-item">
и в свёрнутых
<li class="clusters-list__item clusters-list__item_expandable" data-qa="serp__cluster-item">
В каждом элементе название
<span class="clusters-value__name" data-qa="serp__cluster-item-title">Продажи</span>
и количество
<span class="clusters-value__count" data-qa="serp__cluster-item-number">8951</span>


admon
i = soup.find_all('a','?enable_snippets=true&amp;clusters=true&amp;area=2&amp;specialization=14&amp;from=cluster_professionalArea')
Надо искать не по тегу a, а по тегам ul, li и span, заглядывая в их классы.



Отредактировано py.user.next (Авг. 29, 2015 02:03:34)

Офлайн

#9 Авг. 29, 2015 02:16:49

admon
Зарегистрирован: 2015-04-10
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

url = 'http://hh.ru/search/vacancy?clusters=true&enable_snippets=true&area=2'
f = urllib.urlopen(url)
soup = BeautifulSoup(f)
i = soup.find_all('ul', 'li')
print(i)
вывод пустует.

Офлайн

#10 Авг. 29, 2015 08:22:05

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

html парсер количества вакансий на hh+yandex

admon
вывод пустует.

Перед тем как скормить ссылку парсеру её нужно прочитать.

f = urllib.urlopen(url).read()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version