Задавайте вопросы, касающиеся GrabzIt Web Scraper Tool. Например, как использовать веб-скребок и API для извлечения данных из веб-страниц, изображений или документов PDF.
ошибка:
Traceback (последний последний вызов):
Файл «GrabzItClient.py», строка 6, в
схватить это.SaveTo("документы/результат.docx")
Файл «C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py», строка 235, в SaveTo
идентификатор = сам.Save()
Файл «C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py», строка 209, в Save
obj = self._take(sig, callBackURL)
Файл «C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py», строка 223, в _take
return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
Файл «C:\Program Files\Python36\lib\site-packages\GrabzIt\GrabzItClient.py», строка 629, в HTTPPost
h.endheaders()
Файл «C:\Program Files\Python36\lib\http\client.py», строка 1234, в конечных заголовках.
self._send_output(message_body, encode_chunked=encode_chunked)
Файл «C:\Program Files\Python36\lib\http\client.py», строка 1026, в _send_output
self.send (MSG)
Файл «C:\Program Files\Python36\lib\http\client.py», строка 964, в отправке
self.connect ()
Файл "C:\Program Files\Python36\lib\http\client.py", строка 936, в соединении
(self.host,self.port), self.timeout, self.source_address)
Файл «C:\Program Files\Python36\lib\socket.py», строка 704, в create_connection
для res в getaddrinfo (хост, порт, 0, SOCK_STREAM):
Файл «C:\Program Files\Python36\lib\socket.py», строка 743, в getaddrinfo
для разрешения в _socket.getaddrinfo(хост, порт, семейство, тип, прототип, флаги):
socket.gaierror: [Errno 11001] сбой getaddrinfo
источник: (Я установил GrabzIt и получил КЛЮЧ ПРИЛОЖЕНИЯ и СЕКРЕТ ПРИЛОЖЕНИЯ)
из GrabzIt импортировать GrabzItClient
grabzIt = GrabzItClient.GrabzItClient(КЛЮЧ ПРИЛОЖЕНИЯ, СЕКРЕТ ПРИЛОЖЕНИЯ)
схватить это.HTMLToDOCX(« Привет, мир! ")
схватить это.SaveTo("документы/результат.docx")
не могли бы вы сказать мне, что мне делать?
Добро пожаловать в сообщество!
Обычно socket.gaierror: [Errno 11001] сбой getaddrinfo возникает, когда код вызывается из-за брандмауэра или прокси-сервера. Убедитесь, что приложение имеет доступ к порту 80.
Спасибо за ответ.
Да, это проблема прокси. Он работает нормально, когда я меняю другой компьютер, на котором нет прокси.
Как это может работать с прокси?
Это будет новая функция. Мы ищем возможность изменить клиент Python, чтобы включить использование прокси-серверов.
Если это возможно, мы свяжемся с вами с исправлением. Если хотите, вы можете попробовать сами, поскольку все наши клиенты имеют открытый исходный код: https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py
Мы добавили новую функцию. Просто скачайте файл GrabzItClient.py и замените свою копию здесь: https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py.
Затем вы можете установить URL-адрес прокси-сервера вашего прокси-сервера, используя новый метод SetLocalProxy, например:
GrabzIt.SetLocalProxy("http://123.123.123.123:21231")
Пожалуйста, сообщите нам, как идут дела, и мы скоро выпустим новый релиз!
Спасибо за ответ.
Я заменил GrabzItClient.py и изменил мой источник:
grabzIt = GrabzItClient.GrabzItClient(КЛЮЧ ПРИЛОЖЕНИЯ, СЕКРЕТ ПРИЛОЖЕНИЯ)
GrabzIt.SetLocalProxy("http://xxx@jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080")
схватить это.HTMLToDOCX(« Привет, мир! ")
схватить это.SaveTo("документы/результат.docx")
Пользователь:xxx@jp.xxxxxx.com
Пароль:YYYYYYY
Прокси сервер:zzz.proxy.zzz.zzzzzz.com
порт:8080
сообщение об ошибке:
Traceback (последний последний вызов):
Файл «GrabzIt_test.py», строка 54, в
схватить это.SaveTo("результат.docx")
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 487, в SaveTo
идентификатор = сам.Save()
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 435, в Save
obj = self._take(sig, callBackURL)
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 463, в _take
return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 1307, в HTTPPost
headers['Proxy-Authorization'] = 'Basic' + base64.b64encode(auth)
Файл «C:\Program Files\Python36\lib\base64.py», строка 58, в b64encode
закодировано = binascii.b2a_base64(s, новая строка=False)
TypeError: требуется байтовый объект, а не 'str'
то же сообщение об ошибке, даже если я изменил Установитьлокальный прокси от "http://xxx@jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080"В "http://xxx%40jp.xxxxx.com:yyyyyyy@zzz.proxy.zzz.zzzzzzz.com:8080"
извините, возможно я установил не тот прокси.
Я изменил прокси-сервер на «http://the_other_proxy_server:port», и сообщение об ошибке стало следующим:
Traceback (последний последний вызов):
Файл «GrabzIt_test.py», строка 54, в
схватить это.SaveTo("результат.docx")
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 487, в SaveTo
идентификатор = сам.Save()
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 435, в Save
obj = self._take(sig, callBackURL)
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 463, в _take
return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 1327, в HTTPPost
h.endheaders()
Файл «C:\Program Files\Python36\lib\http\client.py», строка 1234, в конечных заголовках.
self._send_output(message_body, encode_chunked=encode_chunked)
Файл «C:\Program Files\Python36\lib\http\client.py», строка 1026, в _send_output
self.send (MSG)
Файл «C:\Program Files\Python36\lib\http\client.py», строка 964, в отправке
self.connect ()
Файл "C:\Program Files\Python36\lib\http\client.py", строка 940, в соединении
self._tunnel()
Файл «C:\Program Files\Python36\lib\http\client.py», строка 919, в _tunnel
сообщение.полоса()))
OSError: Ошибка туннельного подключения: 407 Требуется проверка подлинности прокси-сервера
Вам необходимо указать имя пользователя и пароль следующим образом: http://username:password@example.com:12335
Да, я указал свое имя пользователя и пароль (вопрос в среду, 22 августа 2018 г., 09:34:43), например:
http://username:password@example.com:12335
имя пользователя — это адрес электронной почты (xxx@jp.xxxxx.com), поэтому я изменил его на xxx%40jp.xxxxx.com.
но это то же сообщение об ошибке: TypeError: требуется байтовый объект, а не 'str'
Извините, я пропустил ваш предыдущий ответ. Я думаю, что это проблема Python 3, и я выпустил исправление, которое должно устранить эту ошибку. Пожалуйста, не могли бы вы еще раз обновить GrabzItClient.py по адресу: https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py
Я заменил файл Python и нашел новое сообщение об ошибке:
Traceback (последний последний вызов):
Файл «GrabzIt_test.py», строка 54, в
схватить это.SaveTo("результат.docx")
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 244, в SaveTo
идентификатор = сам.Save()
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 218, в Save
obj = self._take(sig, callBackURL)
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 232, в _take
return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 661, в HTTPPost
headers['Proxy-Authorization'] = 'Basic' + encodedAuth
TypeError: должно быть str, а не bytes
Хорошо, мы расшифровали это intо ascii. Мы не используем Python 3, поэтому он нас застал врасплох. Пожалуйста, обновите свой код здесь: https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py.
Поскольку это открытый исходный код, не стесняйтесь отлаживать и вносить любые улучшения в Github. Поскольку у нас нет доступа к вашей настройке.
Большое спасибо за вашу помощь.
OSError: Ошибка туннельного подключения: 407 Требуется проверка подлинности прокси-сервера
Я попробую отладить.
Мы думаем, что знаем, в чем проблема, однако потребуется переписать часть кода. Поэтому мы свяжемся с вами, когда закончите. Надеюсь, через 24 часа.
Я считаю, что мы решили проблему! Вы можете получить последнюю версию здесь: https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py.
Спасибо за ответ.
Новое сообщение об ошибке:
Traceback (последний последний вызов):
Файл «GrabzIt_test.py», строка 54, в
схватить это.SaveTo("результат.docx")
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 243, в SaveTo
идентификатор = сам.Save()
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 217, в Save
obj = self._take(sig, callBackURL)
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 231, в _take
return self.HTTPPost(self.request.url, self.request.options._getParameters(self.applicationKey, sig, callBackURL, 'html', quote(self.request.data)))
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 629, в HTTPPost
h = self._getConnection()
Файл «C:\TEST\GrabzIt_python\GrabzIt\GrabzItClient.py», строка 679, в _getConnection
h.putheader('прокси-авторизация', 'Basic' + encodedAuth)
Файл «C:\Program Files\Python36\lib\http\client.py», строка 1201, в заголовке putheader.
поднять CannotSendHeader()
http.client.CannotSendHeader
Мы внесли некоторые незначительные улучшения в: https://github.com/GrabzIt/grabzit/blob/master/python/GrabzIt/GrabzItClient.py.
И протестировали его на Python 2.7, 3.4 и 3.6, и он работает во всех средах, с прокси-серверами и без них, а также с авторизованными прокси-серверами.
Если у вас все еще не работает, вам нужно будет отладить код.
Спасибо за ответ.
Я отлажу свой источник.
Кстати, вы проверяли имя пользователя, например, xxx@yyy.com?
Нет, я не думал, что это нужно будет правильно закодировать и декодировать, так что, возможно, проблема в этом.