python — Ошибка парсинге сайта
Короче есть код для парсинга сайта, первый раз он почти спарсил всё что нужно, но потом при повторных перезапусках в строке 42 он может выдавать ошибку «occupations» или в 74 «workers», а может выдать одну из них отпарсив уже несколько страниц, хотя первые разы такого не было, в чем проблема? Строки с ошибками пометил комментариями
import json import time import requests from bs4 import BeautifulSoup import os from colorama import init, Fore, Back, Style def fetch(url,params): headers = params['headers'] body = params['body'] if params['method']=='GET': return requests.get(url,headers=headers) if params['method']=='POST': return requests.post(url,headers=headers,data=body) return requests main_page = fetch("https://uslugi.yandex.ru/api/213-moscow/get_home_rubrics?lr=213&workersCount=true", { "headers": { "accept": "application/json, text/plain, */*", "accept-language": "ru-RU,ru;q=0.9", "content-type": "application/json;charset=UTF-8", "sec-ch-ua": "\"Chromium\";v=\"102\", \"Opera GX\";v=\"88\", \";Not A Brand\";v=\"99\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "x-app-version": "2.2447.0-15f89d2af056750a15086038994cba0e5bfeea51.0", "x-csrf-token": "da2f836cc33b86d110f223c0f134d10fd47f75e1:1656503032", "x-expected-puid": "", "x-requested-with": "XMLHttpRequest", "x-retpath-y": "https://uslugi.yandex.ru/213-moscow/catalog?rubric=%2Fkrasota", "cookie": "yandexuid=2585937781656503024; i=gWrntQ7lN3x3Uw5qP0Qz15+IdJQ5aqQRg67OJMWpzHPOsjah4cLe4bx1+Vp/twBpHbZv9BdJW9noXS+kKVTl8HPt7l0=; _yasc=2w/cmb9EmlLja6ze+YvsuHHaSC1fsXOTMKq4gKynm/cOzsMs; yuidss=2585937781656503024; ymex=1971863025.yrts.1656503025; gdpr=0; _ym_uid=1656503024996753070; _ym_d=1656503025; _ym_visorc=b; spravka=dD0xNjU2NTAzMDMyO2k9OTUuMzEuMTY0LjE0NztEPTkzRTg4RUU2M0VBMTg2NjNFNTQzNTNCREIyNEUzMTVFNjU1QTVGMjI1NzU2NDNGRjMxRTk3NTE2NEYyN0Y4Q0VBNzBCQ0M2NDt1PTE2NTY1MDMwMzI4NjY4NzEzNjk7aD0zYThmYTliZWYzNTU1NDMzZjk0MmM0NDMyNjAwYTk5Mg==; _ym_isad=2", "Referer": "https://uslugi.yandex.ru/213-moscow/catalog?rubric=%2Fkrasota", "Referrer-Policy": "strict-origin-when-cross-origin", 'User-Agent': 'Mozilla/5. 0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36 OPR/88.0.4412.65' }, "body": "{\"data\":{\"params\":{}}}", "method": "POST" }) for i in range(58): name_for_dir = main_page.json()['occupations'][8]['specializations'][i]['name'] # Ошибка occupations os.mkdir(f'{name_for_dir}') print('\t'+Fore.RED + main_page.json()['occupations'][8]['specializations'][i]['name']+Fore.RESET) krasota_specializations_id = main_page.json()['occupations'][8]['specializations'][i]['numberId'] krasota_specializations_seoID = 'https://uslugi.yandex.ru/api/213-moscow/category' + main_page.json()['occupations'][8]['specializations'][i]['seoId'] for page in range(10): print('\t'+Fore.RED+f'Page: {page} from 10'+Fore.RESET) workers = fetch(f"{krasota_specializations_seoID}--{krasota_specializations_id}?p={page}", { "headers": { "accept": "application/json, text/plain, */*", "accept-language": "ru-RU,ru;q=0.9", "sec-ch-ua": "\"Chromium\";v=\"102\", \"Opera GX\";v=\"88\", \";Not A Brand\";v=\"99\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "x-app-version": "2. 2447.0-15f89d2af056750a15086038994cba0e5bfeea51.0", "x-csrf-token": "5d9ba3e6858087eb66d56266930eee265a79cf3d:1656503276", "x-expected-puid": "", "x-requested-with": "XMLHttpRequest", "x-retpath-y": f"{krasota_specializations_seoID}--{krasota_specializations_id}?p={page}", "x-uslugi-apitargeturl": f"{krasota_specializations_seoID}--{krasota_specializations_id}?p={page}", "cookie": "yandexuid=2585937781656503024; i=gWrntQ7lN3x3Uw5qP0Qz15+IdJQ5aqQRg67OJMWpzHPOsjah4cLe4bx1+Vp/twBpHbZv9BdJW9noXS+kKVTl8HPt7l0=; yuidss=2585937781656503024; ymex=1971863025.yrts.1656503025; gdpr=0; _ym_uid=1656503024996753070; _ym_d=1656503025; _ym_visorc=b; spravka=dD0xNjU2NTAzMDMyO2k9OTUuMzEuMTY0LjE0NztEPTkzRTg4RUU2M0VBMTg2NjNFNTQzNTNCREIyNEUzMTVFNjU1QTVGMjI1NzU2NDNGRjMxRTk3NTE2NEYyN0Y4Q0VBNzBCQ0M2NDt1PTE2NTY1MDMwMzI4NjY4NzEzNjk7aD0zYThmYTliZWYzNTU1NDMzZjk0MmM0NDMyNjAwYTk5Mg==; _ym_isad=2; is_gdpr=0; is_gdpr_b=CNzDcxC+ew==; _yasc=/BObO2mO50Khb3LNMjsrTAvUhIW7wjC4qHpExN/rupJa65vp", "Referer": f"{krasota_specializations_seoID}--{krasota_specializations_id}?p={page}", "Referrer-Policy": "strict-origin-when-cross-origin", 'User-Agent': 'Mozilla/5. 0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36 OPR/88.0.4412.65' }, "body": None, "method": "GET" }) print(f"{krasota_specializations_seoID}--{krasota_specializations_id}?p={page}") persons = workers.json()['workers']['items'] # Ошибка workers for person in persons: person_name = persons[person]['personalInfo']['displayName'] try: person_description = persons[person]['personalInfo']['description'].strip() except: person_description = '' continue person_socialLinks_appointments = persons[person]['personalInfo']['socialLinks']['appointments'] person_socialLinks_messengers = persons[person]['personalInfo']['socialLinks']['messengers'] person_socialLinks_other = persons[person]['personalInfo']['socialLinks']['other'] person_socialLinks_appointments_list = {} person_socialLinks_messengers_list = {} person_socialLinks_other_list = {} for ln in person_socialLinks_appointments: first = ln second = person_socialLinks_appointments[ln] person_socialLinks_appointments_list[first] = second for ln in person_socialLinks_messengers: first = ln second = person_socialLinks_messengers[ln] person_socialLinks_messengers_list[first]= second for ln in person_socialLinks_other: first = ln second = person_socialLinks_other[ln] person_socialLinks_messengers_list[first]= second if person_socialLinks_appointments == {}: person_socialLinks_appointments = '' if person_socialLinks_messengers == {}: person_socialLinks_messengers = '' if person_socialLinks_other == {}: person_socialLinks_other = '' person_data = [] person_data. append( { 'Name: ':person_name, 'Appointments: ':person_socialLinks_appointments_list, 'Messangers: ': person_socialLinks_messengers_list, 'Other Links: ': person_socialLinks_other_list, 'Description: ': person_description } ) print(Fore.YELLOW+'Name: '+Fore.RESET+f'{person_name}\n\n'+Fore.YELLOW+'Links:\n'+Fore.GREEN+'Appointments: '+Fore.RESET+f'{person_socialLinks_appointments}\n'+ Fore.GREEN+'Messengers: '+Fore.RESET+f'{person_socialLinks_messengers}\n'+Fore.GREEN+'Other: '+Fore.RESET+f'{person_socialLinks_other}\n\n'+Fore.YELLOW+'Description: '+ Fore.RESET+f'{person_description}\n') print(Fore.RED+'----------------------'+Fore.RESET) with open(f'{name_for_dir}/page_{page+1}.json','a',encoding='utf-8') as file: json.dump(person_data,file,indent=4,ensure_ascii=False)
Ошибка парсинга параметра метода rest типа дата — Вопросы и проблемы
osipenko. aleksey (Osipenko Aleksey)
#1
Вызываем любой метод rest сервиса с параметром типа Date. При преобразовании строки в дату теряются секунды
belyaev (Andrey Belyaev)
#2
А можете сделать небольшую программу, в которой воспроизводится эта проблема? Потому что непонятно, какие библиотеки вы используете, откуда берутся данные и как описана модель сущностей.
Есть пример по использованию retrofit для получения данных из внешних REST API, посмотрите, возможно, поможет.
osipenko. aleksey (Osipenko Aleksey)
#3
Вы можете создать сами тестовый проект. Создать сервис с одним и параметром типа Date. Далее вызвать этот метод с помощью post запроса и передать значение параметра строку ‘2020-01-01T23:59:59’ после преобразования кубы этого параметра у него пропадают секунды. То есть вы получите дату 2020-01-01 00:00:00
subbotin (Andrey Subbotin)
#4
Там точно java.util.Date в качестве аргумента?
Из документации —
Parameter value must be passed in a format defined for the corresponding datatype. For example:
- if the parameter type is
java.util.Date
, then the value pattern is taken from theDateTimeDatatype
. By default it isyyyy-MM-dd HH:mm:ss.SSS
- for
java.sql.Date
parameter type, the value pattern is taken from theDateDatatype
and it isyyyy-MM-dd
by default - for
java.sql.Time
the datatype isTimeDatatype
and the default format isHH:mm:ss
osipenko.aleksey (Osipenko Aleksey)
#5
Непонятно то есть формат даты ISO не поддерживается?
subbotin (Andrey Subbotin)
#6
В REST сейчас нет ISO формата. Все преобразования данных из строки в объект и обратно зависят от datatype.
osipenko.aleksey (Osipenko Aleksey)
#7
Почему так?
osipenko.aleksey (Osipenko Aleksey)
#8
Добавьте пожалуйста iso формат для даты
subbotin (Andrey Subbotin)
#9
Попробуйте передать дату в формате 2015-01-02 01:02:03.004
и в сервисе аргумент должен быть типа java.util.Date. По автотестам — это сейчас работает. Если не сработает у вас — будем отдельно разбираться.
subbotin (Andrey Subbotin)
#10
С добавлением ISO не все так просто: нужно обеспечить совместимость со старыми клиентами, чтобы могло работать и старое и новое поведение, так же необходимо исправление не только для формата данных типа Date (а и для всех остальных примитивных типов) — на это есть тикет: https://github.com/cuba-platform/restapi/issues/89
Почему так: делали единообразие форматирования данных в разных клиентах REST/GUI.
osipenko.aleksey (Osipenko Aleksey)
#11
Хорошо, тогда подскажите как нам решить проблему? Может быть мы сможем переопределеить метод который парсит даты передаваемые по rest?
subbotin (Andrey Subbotin)
#12
Для сервисов парсинг параметров запроса происходит в spring бине: RestParseUtils. Возможно переопределить этот бин, чтобы парсить дату по своему.
Что это такое и как их исправить
- Блог Hubspot
- HubSpot. com
Загрузка
- Проверьте введенные вами формулы и убедитесь, что они верны.
- Использовать функцию ЕСЛИОШИБКА и отображать другой результат в случае возникновения ошибки. Например. «Не найден.»
- Проверьте правильность написания и убедитесь, что все скобки стоят на своих местах.
- Убедитесь, что вы используете правильные операторы.
- Используйте ссылки на ячейки вместо жестко закодированных значений в формулах.
- Если вы используете текстовые значения, убедитесь, что они заключены в кавычки.
Как выделить дубликаты в Google Таблицах [шаг за шагом]
12 июля 2022 г.
Как сделать гистограмму в Google Таблицах [5 шагов]
10 июня 2022 г.
30 ярлыков Google Sheets, которые нужно знать маркетологам
22 апр. 2022 г.
Ошибки синтаксического анализа формул: что это такое и как их исправить
15 апр. 2022 г.
Как сортировать в Google Sheets
15 апр. 2022 г.
- hubspot.com/marketing/if-function-google-sheets»>
Как использовать функцию «если» в Google Sheets
08 апр. 2022 г.
Практическое руководство: условное форматирование на основе другой ячейки в Google Sheets
10 марта 2022 г.
- hubspot.com/marketing/google-sheets-drop-down»>
Как создать выпадающее меню Google Sheets
03 марта 2022 г.
Полное руководство по Google Таблицам
02 февраля 2022 г.
21 из лучших бесплатных шаблонов Google Sheets на 2022 год
14 января 2022 г.
- Приложение, которое вы пытаетесь загрузить, может быть несовместимо с вашим устройством.
- Файл приложения, которое вы пытаетесь загрузить, неполный или поврежден.
- Устройство, на которое вы пытаетесь загрузить его, не имеет необходимого разрешения для его загрузки.
- Проблема с самим Android-устройством.
- В приложении, которое вы пытаетесь установить, могут быть некоторые изменения.
- Антивирусное программное обеспечение вашего телефона препятствует установке приложения.
О нет! Мы не смогли найти ничего подобного.
Попробуйте еще раз поискать, и мы постараемся.
Вы работаете с электронной таблицей и хотите использовать функцию.
Вы пишете формулу, взволнованная получением результатов, а затем видите сообщение «Ошибка синтаксического анализа формулы», которое оставляет вас в замешательстве и чувствуете себя немного побежденным.
Давайте рассмотрим, что это на самом деле означает и что может привести к этому сообщению об ошибке.
Что такое ошибка синтаксического анализа формулы?
Ошибка синтаксического анализа формулы возникает, когда вы вводите формулу в ячейку, а программа для работы с электронными таблицами не может понять, что вы от нее хотите.
Это все равно, что пытаться говорить на другом языке, не тратя время на его изучение.
Программное обеспечение может понять, что вы говорите, но недостаточно хорошо, чтобы дать вам точный результат.
Возможны две причины этой ошибки: опечатка в формуле или неясный порядок операций.
Мы рассмотрим несколько примеров каждого из них, чтобы вы могли определить и исправить их в своих собственных формулах.
Распространенные ошибки синтаксического анализа формулы
Обычно ошибка синтаксического анализа формулы возникает из-за:
Неправильного синтаксиса – Например: ввод =+ вместо =, забывание заключать текстовые значения в кавычки, размещение двух операторов рядом друг с другом без чего-либо между ними
Неполный синтаксис – напр. Опуская скобки.
Другая причина, по которой вы можете получить эти ошибки, заключается в том, что вы пытаетесь использовать текстовые значения вместо чисел.
Давайте рассмотрим конкретные типы ошибок, с которыми вы можете столкнуться:
#N/A ErrorОдной из наиболее распространенных ошибок является #N/A. Это происходит, когда формула не может найти то, что ищет.
Например, если вы используете функцию ВПР для поиска значения в таблице, а искомого значения нет в таблице, вы получите ошибку #Н/Д.
#DIV/0 ОшибкаЭто происходит при попытке разделить число на ноль.
Например, если у вас есть формула =A17/B17 и значение в B17 равно 0, вы получите #DIV/0! ошибка.
#ССЫЛКА! ОшибкаЕсли формула содержит недопустимую ссылку на ячейку, вы получите это сообщение об ошибке.
Например, если у вас есть формула, которая ссылается на ячейки A17:A22, и вы удаляете строку 21, формула вернет ошибку #ССЫЛКА! ошибка, потому что у него больше нет действительной ссылки.
Ошибка #ЗНАЧОшибка #ЗНАЧ! ошибка возникает, когда формула содержит недопустимое значение.
Например, если у вас есть формула, которая умножает две ячейки, и одна из ячеек содержит текст вместо числа, вы получите эту ошибку.
#NAME ErrorЭта ошибка возникает, когда формула содержит недопустимое имя.
Например, если у вас есть именованный диапазон под названием «Цены», и вы случайно введете «цена» в свою формулу, вы получите ошибку #ИМЯ? ошибка.
#ЧИСЛО Ошибка#ЧИСЛО! ошибка возникает, когда формула содержит недопустимое число.
Допустим, у вас есть формула, которая делит две ячейки, и результат слишком велик для отображения, вы получите эту ошибку.
Теперь, когда мы знаем, что может вызвать ошибку синтаксического анализа формулы, давайте посмотрим, как мы можем ее исправить.
Как исправить ошибки синтаксического анализа формул
Лучший способ избежать ошибок синтаксического анализа формул — тщательно проверять синтаксис при вводе. Если вы не уверены, в каком порядке должны выполняться операции, вернитесь к порядку операций, предложенному используемым вами программным обеспечением.
Если вы получаете ошибки анализа формулы, вот несколько шагов, которые вы можете предпринять, чтобы исправить их:
Следуя этим шагам, вы сможете избежать ошибок при синтаксическом анализе формул и получить точные результаты из ваших формул.
Темы: Google Таблицы
Не забудьте поделиться этим постом!
Похожие статьи
Ошибка пакета синтаксического анализа Android — что это такое и как это исправить
— Реклама —
Android-устройства очень популярны по разным причинам. Они поставляются с удобными функциями, а также подходят для любого размера кармана. В отличие от Apple, им не нужна его экосистема для работы, и по этой причине у Android огромное количество поклонников.
Несмотря на то, что они довольно просты в эксплуатации и использовании, существует множество различных ошибок, которые устройство может выдать перед вами. Сегодня мы обсудим одну конкретную ошибку, которая называется анализом ошибки пакета. Мы обсудим шаги по устранению проблемы с Android при анализе ошибки пакета.
Здесь для вас много информации, так что следите за обновлениями!!
Начнем!
Прежде чем двигаться дальше, давайте сначала разберемся, что такое ошибка синтаксического анализа.
Ошибка синтаксического анализа возникает на устройстве Android, когда не удается установить приложение. Это сообщение об ошибке является не чем иным, как указанием на основную проблему. Существует множество проблем, из-за которых приложение может не установиться. Главное, что следует отметить при разборе ошибки пакета, это то, что приложение не удалось установить.
Если вы хотите установить приложение, вам придется решить проблему Android с анализом ошибки пакета.
Ошибка синтаксического анализа может быть вызвана сторонним приложением. Таким образом, когда вы устанавливаете приложение, но оно не устанавливается, вы увидите сообщение типа «ошибка синтаксического анализа» или «возникла проблема при синтаксическом анализе пакета». Эта ошибка может появиться не только в сторонних приложениях, но и при загрузке приложения из Google Play Store. Однако это менее распространенное явление.
Подробнее: — 6 простых шагов для установки новейшей бета-версии Android 12L на Google Pixel
По каким причинам может возникнуть эта ошибка? Наиболее распространенные причины:Есть несколько способов исправить ошибку синтаксического анализа Android. Вы можете попробовать любой из них, а затем посмотреть, исправлена ли ошибка. Если в случае, если один метод не дал никакого результата, вы можете перейти к следующему.
1. Самое простое и очевидное, что нужно сделать, это обновить Android. Возможно, приложение, которое вы пытаетесь установить, совместимо с последней версией Android. Если текущая версия Android несовместима с приложением, оно будет постоянно показывать ошибку синтаксического анализа.
В худшем случае вам, возможно, придется купить новый телефон, потому что ваш старый телефон может вообще не поддерживать новую версию Android.
2. Следующая возможная причина может заключаться в том, что вы отключили разрешение на установку приложений из сторонних источников. Если вы доверяете источнику приложения, включите разрешение на установку приложений из сторонних источников. Эта опция отключена по умолчанию.
3. Попробуйте включить отладку по USB. Вы можете попробовать установить приложение, включив режим разработчика на своем Android, а затем включив опцию отладки по USB.
4. Попробуйте временно отключить параметры безопасности на вашем телефоне. Если вы доверяете источнику приложения, которое пытаетесь установить, вы можете попробовать установить его один раз после отключения всех функций безопасности. . Функции безопасности вашего телефона могут ошибочно рассматривать приложение как угрозу, из-за чего у приложения могут возникнуть проблемы при установке.
5. Попробуйте снова загрузить и переустановить файл .apk. Как упоминалось выше, файл приложения может быть неполным или поврежденным. Чтобы исправить это, вы можете вернуться на веб-сайт и снова попытаться загрузить исходный файл .apk.
6. Для более продвинутых пользователей одним из возможных решений может быть восстановление измененного файла манифеста. Ошибка синтаксического анализа может возникнуть из-за изменений, внесенных в файл Androidmanifest.xml, который содержится в файле .apk. Вы можете попробовать восстановить файл в исходном виде. Затем повторите попытку установки файла .apk.
7. Если больше ничего не работает, попробуйте восстановить заводские настройки телефона Android. Этот метод немного сложен, потому что он удалит все ваши данные. Это вариант приветствия, который означает, что его следует использовать только тогда, когда вы безуспешно пробовали все другие варианты. Как только вы его перезагрузите, обновите устройство Android до последней версии, а затем попробуйте переустановить приложение.