Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 24, 2017 10:59:10

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

Убрать лишние значения при парсинге названий

Есть код

import requests
import urllib
from bs4 import BeautifulSoup
import csv
from datetime import datetime
from multiprocessing import Pool


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')

vacancies = []

for row in table.find_all('div', class_='search-result-description__item search-result-description__item_primary'):
cols = row.find_all('div', class_='search-result-item__head')

vacancies.append({
'title': cols[0].a.text,
})

for vacancy in vacancies:
print(vacancy)

salaries = []

for row in table.find_all('div', class_='search-result-description__item search-result-description__item_primary'):
cols2 = row.find_all('div', class_='b-vacancy-list-salary')

salaries.append({
'categories': cols2[0].div.find_all('meta', class_='baseSalary')
})

for salary in salaries:
print(salary)


def main():
parse(get_html(
'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='))


if __name__ == '__main__':
main()


Выводит такую запись
{'title': 'Специалист \u2062по логистике'}
{'title': 'Специалист \u2062по логистике'}
{'title': 'Специалист по ло\u2062гистике и сервису'}
{'title': 'Специалист \u2062по логистике'}
{'title': 'Менеджер п\u2062о логистике'}
{'title': 'Логист-э\u2062кспедитор'}
{'title': 'Логист / Специалист по о\u2062рганизации грузоперевозок'}
{'title': 'Оператор TMS (лог\u2062ист по транспорту)'}


Подскажите, пожалуйста, как убрать
  \u2062
???
Откуда она и почему образовывается, ведь в коде страницы ее нет

Офлайн

#2 Авг. 24, 2017 12:36:01

delvin-fil
Зарегистрирован: 2015-11-27
Сообщения: 95
Репутация: +  4  -
Профиль   Отправить e-mail  

Убрать лишние значения при парсинге названий

Ну re же

 out = re.sub(r'\\u2062', '', salary)
Совершенно не правильно(с точки зрения PEP), но работает.



 import __hello__

Офлайн

#3 Авг. 24, 2017 15:17:32

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

Убрать лишние значения при парсинге названий

Не совсем понимаю, как воспользоваться Вашим советом)

Офлайн

#4 Авг. 24, 2017 15:25:30

delvin-fil
Зарегистрирован: 2015-11-27
Сообщения: 95
Репутация: +  4  -
Профиль   Отправить e-mail  

Убрать лишние значения при парсинге названий

Добавтье модуль re
А перед print(salary) вставьте приведенный мной код(не нижний - это подпись моя)
Вот так:

 import requests
import urllib
from bs4 import BeautifulSoup
import csv
from datetime import datetime
from multiprocessing import Pool
import re #добавили модуль
####Ваш код
 out = re.sub(r'\\u2062', '', salary)
print(out) # уже не print(salary)
####Остальная часть кода



 import __hello__

Офлайн

#5 Авг. 24, 2017 18:25:16

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

Убрать лишние значения при парсинге названий

Ругается

import urllib
from bs4 import BeautifulSoup
import re

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')

vacancies = []

for row in table.find_all('div', class_='search-result-description__item search-result-description__item_primary'):
cols = row.find_all('div', class_='search-result-item__head')

vacancies.append({
'title': cols[0].a.text,
})

for vacancy in vacancies:
out = re.sub(r'\\u2062', '', vacancy)
print(out)

def main():
parse(get_html(
'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='))

if __name__ == '__main__':
main()

Пишет
Парсинг/exp(title).py
Traceback (most recent call last):
File "C:/Users/Anton/PycharmProjects/Парсинг/experimental2(title).py", line 31, in <module>
main()
File "C:/Users/Anton/PycharmProjects/Парсинг/experimental2(title).py", line 28, in main
'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='))
File "C:/Users/Anton/PycharmProjects/Парсинг/experimental2(title).py", line 23, in parse
out = re.sub(r'\\u2062', '', vacancy)
File "C:\Users\Anton\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 191, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object

Process finished with exit code 1

Офлайн

#6 Авг. 24, 2017 18:35:06

delvin-fil
Зарегистрирован: 2015-11-27
Сообщения: 95
Репутация: +  4  -
Профиль   Отправить e-mail  

Убрать лишние значения при парсинге названий

Проверил. Правильно пишет, ибо тип byte и там так заменить нельзя.
Исправьте строку

 out = re.sub(r'\\u2062', '', str(vacancy))



 import __hello__

Офлайн

#7 Авг. 24, 2017 20:37:16

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

Убрать лишние значения при парсинге названий

Спасибо, что помогли, теперь все красиво)!

Офлайн

#8 Авг. 24, 2017 20:52:00

delvin-fil
Зарегистрирован: 2015-11-27
Сообщения: 95
Репутация: +  4  -
Профиль   Отправить e-mail  

Убрать лишние значения при парсинге названий

Да всегда пожалуйста



 import __hello__

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version