Найти - Пользователи
Полная версия: html парсер количества вакансий на hh+yandex
Начало » Python для новичков » html парсер количества вакансий на hh+yandex
1 2
admon
#!/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>
py.user.next
admon
тысячный разряд отделен пробелом
Ты всё равно ищешь по тегу. Нужно просто из содержимого тега удалить всё, кроме цифр. Оставшиеся цифры образуют число.
admon
'^>[^A-Za-zА-Яа-я]\s<$'
Так?
py.user.next
>>> import re
>>> 
>>> s = re.sub(r'[^\d]', '', '5 217 вакансий ')
>>> s
'5217'
>>>
admon
с яндексом разобрался, спасибо, с хх как будет?
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>

имя и значение под общим тэгом, его бы и желательно парсить, а дальше уже соответствие находить по регэкспам попробую, в дальнейшем к гдокс прикручу.
py.user.next
admon
с яндексом разобрался, спасибо, с хх как будет?
Задача в чём?
admon
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 пробовал парсить, но не находило.
py.user.next
Сначала найди все названия профобластей.
Они находятся в списке
<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, заглядывая в их классы.
admon
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)
вывод пустует.
ayb
admon
вывод пустует.

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

f = urllib.urlopen(url).read()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB