Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Авг. 31, 2017 16:04:11

Antonpython
Зарегистрирован: 2017-02-14
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Запись запрошенной информации в ячейки Excel

Добрый день, всем!!! Вот, написал

import urllib
from bs4 import BeautifulSoup
import re
import csv


URL = 'https://jobs.tut.by/search/vacancy?text=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82&only_with_salary=false&area=16&enable_snippets=true&clusters=true&salary='


def get_page_count(html):

soup = BeautifulSoup(html, "lxml")
list = soup.find('div', class_='l-cell').find_all('li')[-1].text
return int(list)

def get_html(url):
response = urllib.request.urlopen(url)
return response.read()

def parse(html):
soup = BeautifulSoup(html, "lxml")
table = soup.find('table', class_='l l_auto')

projects = []

for row in table.find_all('div', class_='search-result-description__item search-result-description__item_primary'):
nazv = row.find_all('div', class_='search-result-item__head')
region = row.find_all('span', class_='searchresult__address')
date = row.find_all('span', class_='b-vacancy-list-date')
company = row.find_all('div', class_='search-result-item__company')
salary = (row.find_all('meta', itemprop='baseSalary'))

projects.append({
'vacancy': nazv[0].a.text,
'region': region[0].text,
'date':(date[0].text),
'company': company[0].a.text.strip(),
# 'salary' : salary[-1]['content']
'salary': salary
})

for project in projects:
project = project
return projects

def save(projects, path):

with open(path, 'w') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(('Вакансии','Регион','Дата','Компания','Зарплата'))

for project in projects:

# writer.writerow((project['vacancy'], ', '.join(project['region']), project['date'], project['company'], project['salary']))
writer.writerow((project['vacancy'], project['region'], project['date'], project['company'], project['salary']))

def main():
page_count = get_page_count(get_html(URL))
print('Всего найдено страниц %d' %page_count)

projects = []

for page in range(1, page_count):
print('Parsing %d%%' %(page/page_count*100))
projects.extend(parse(get_html(URL + '?page=%d' % page)))

for project in projects:
project = re.sub(r'\\xa0', ' ', str(project))
project = re.sub(r'(\[<meta content=")', '', str(project))
project = re.sub(r'(\" itemprop="baseSalary"/>])', '', str(project))

print(project)

save(projects, 'vacancies.csv')

if __name__ == '__main__':
main()


Хочу понять, как записать в ячейки Excel, чтобы
1) каждый пункт был в своем столбце…
2) Однако у меня записывает все в один столбец и при чем через строчку….
3) Так же не работают мои регулярные выражения….В консоль выводится, а в Excel не зачищает….

Подскажите, пожалуйста, как это устранить…

Офлайн

#2 Сен. 1, 2017 13:44:45

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

Запись запрошенной информации в ячейки Excel

Antonpython
1) каждый пункт был в своем столбце…
Нужно изменить разделитель полей. Excel не соблюдает правила, он может требовать точку с запятой, хотя формат CSV основывается на запятой. Чтобы изменить разделитель, при создании writer'а можно передать разделитель.

Antonpython
2) Однако у меня записывает все в один столбец и при чем через строчку….
Потренируйся на небольшом самодельном файле, чтобы понять, какие байты там нужны. Просто создай файл a b c и открывай его в Excel, пока он нормально его не откроет. Просто меняй разделители там в блокноте и смотри, как Excel его открывает.

По идее, тебе нужно сохранять данные по-нормальному, а потом этот сохранённый файл преобразовать в этот Exel'евский тупой формат. Не надо из-за Excel'я всё портить, следуй мировым стандартам, а для Excel'я просто подготавливай всё перед импортом.

Antonpython
3) Так же не работают мои регулярные выражения….В консоль выводится, а в Excel не зачищает….
Не ориентируйся на Excel, работай с данными напрямую. А потом уже переделаешь их под Excel, когда они будут сохранены.
Просто это проблемы не питона и не CSV, это проблемы Excel'я, потому что раньше у них была монополия и они творили что хотели как со стандартами, так и с форматами. Теперь у них монополии нет, но вся эта хрень до сих пор тянется шлейфом из истории. Не давай Excel'ю определять, как тебе данные хранить, иначе оно будет всё в испорченном виде храниться.



Отредактировано py.user.next (Сен. 1, 2017 13:48:08)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version