как вытащить список городов из яндекса (работа) python

269
21 апреля 2017, 18:14

Задача: получить количество вакансий по определенным городам

rabota.yandex.ru/search?rid=225 ссылка на страницу "Россия", rid (region id) = 225 В идеале, нужно узнать эти rid для каждого города и в цикле меняя url собирать данные, но rid вытащить не получается пробовал с помощью selenium вписывать название городов в графу и получать данные, но допустим нельзя выбрать город "Самара" есть только "Самара, Самарская область" как вариант для поиска в яндексе, а когда вписываешь это с помощью send_keys запрос не проходит

from selenium import webdriver
import pandas as pd
import re
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
table=pd.read_html('http://dic.academic.ru/dic.nsf/ruwiki/685243')
table=table[1]
town_list=table[2]
town_list=town_list[1:len(town_list)]
data = pd.DataFrame(index=range((len(town_list),3)),columns=['city',             'url','volume'])
data['url'].apply(str)
browser = webdriver.Chrome()
browser.get('https://rabota.yandex.ru/search?rid=225')
form = \
browser.find_element_by_name('rid')
wait = WebDriverWait(browser, 30, ignored_exceptions=1)
for i in range(0,len(town_list)):
    url0 = browser.current_url
    form.clear()
    form.send_keys(town_list.iat[i])
    #print (town_list.iat[i])
    time.sleep(2)
    form.submit()
    wait.until(lambda browser: browser.current_url != url0)
    data.iloc[i,1] = browser.current_url
    #print ( browser.current_url)

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

int(re.split(' ', browser.find_element_by_xpath("//div[contains(text(), 'вакансий')]").text)[0])

Если посмотреть в коде страницы в графе network (так называется в хроме), то в момент ввода города в поисковую строку появляется запрос "rabota.yandex.ru/gate/suggest/regions" где лежит response, со словариком, в котором есть как раз rid городов Каааак получиииить его)) ведь получив список городов, я бы просто прошелся в цикле, собрав все что мне нужно)) Help!

Answer 1

Добрый день! У меня тоже был такой опыт. Смотрите, вам нужно в вашем python файле сделать запрос на данные, а именно:

import requests
abc = requests.get('https://yandex.ru/yaca/geo.c2n')
menu = abc.c2n()
Answer 2

Добрый день. Я не уверен, что правильно понял Ваш вопрос. Но список с rid городов (или "регионов") доступен по этой ссылке: https://yandex.ru/yaca/geo.c2n Ссылку взял тут: https://tech.yandex.ru/xml/doc/dg/reference/regions-docpage/

Answer 3
#!/usr/bin/env python 
import requests
r = requests.get('https://yandex.ru/yaca/geo.c2n')
r.raise_for_status()
lines = r.content.decode(r.apparent_encoding).splitlines()
regions = dict(line.split('\t') for line in lines)

Результат

{'0': 'Регионы',
 '1': 'Москва и область',
 '10': 'Орел',
 '100': 'Франкфурт-на-Майне',
 '10002': 'Северная Америка',
 ...,
 '98': 'Кельн',
 '983': 'Турция',
 '99': 'Мюнхен',
 '994': 'Индия',
 '995': 'Таиланд'}
READ ALSO
Не пустой контейнер

Не пустой контейнер

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

243
Если направить мышку на кнопку должна появиться panel

Если направить мышку на кнопку должна появиться panel

Нужно чтобы когда пользователь направил курсор на button1 автоматически отобразилась panel1 и когда курсор уйдет с button1 и panel1, то panel1 должна скрыться

219
Как проверить разрядность системы?

Как проверить разрядность системы?

Имея данный алгоритм, почему-то большую часть показывает x32У меня стоит x64

248
Переход с 1 на 2-ую сцену (Unity)

Переход с 1 на 2-ую сцену (Unity)

Пытаюсь сделать игру на Android, при клике по кнопке для перехода на другую сцену выдает ошибку:

429