Ошибка индекса Proxybroker

#python #asynchronous #python-3.5 #python-asyncio #aiohttp

#python #асинхронный #python-3.5 #python-asyncio #aiohttp

Вопрос:

Я пытаюсь использовать пакет python proxybroker.
Я попытался использовать один из примеров, упомянутых здесь. Я просто скопировал следующий пример для локального запуска:

 import asyncio from proxybroker import Broker


async def save(proxies, filename):
    """Save proxies to a file."""
    with open(filename, 'w') as f:
        while True:
            proxy = await proxies.get()
            if proxy is None:
                break
            proto = 'https' if 'HTTPS' in proxy.types else 'http'
            row = '%s://%s:%dn' % (proto, proxy.host, proxy.port)
            f.write(row)


def main():
    proxies = asyncio.Queue()
    broker = Broker(proxies)
    tasks = asyncio.gather(broker.find(types=['HTTP', 'HTTPS'], limit=10),
                           save(proxies, filename='proxies.txt'))
    loop = asyncio.get_event_loop()
    loop.run_until_complete(tasks)


if __name__ == '__main__':
    main()  

Когда я пытаюсь запустить код, выдается следующая ошибка вместе с некоторыми предупреждениями об устаревании:

 /home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning)
/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/aiohttp/client.py:494:
DeprecationWarning: Use async with instead   warnings.warn("Use async
with instead", DeprecationWarning) https://getproxy.net/en/ is failed.
Error: ClientOSError(101, 'Cannot connect to host getproxy.net:443
ssl:True [Can not connect to getproxy.net:443 [Network is
unreachable]]'); https://getproxy.net/en/ is failed. Error:
ClientOSError(101, 'Cannot connect to host getproxy.net:443 ssl:True
[Can not connect to getproxy.net:443 [Network is unreachable]]');
https://getproxy.net/en/ is failed. Error: ClientOSError(101, 'Cannot
connect to host getproxy.net:443 ssl:True [Can not connect to
getproxy.net:443 [Network is unreachable]]'); Traceback (most recent
call last):   File
"/home/sebastian/PycharmProjects/testing/test/test_prox.py", line 27,
in 
    main()   File "/home/sebastian/PycharmProjects/testing/test/test_prox.py", line 23,
in main
    loop.run_until_complete(tasks)   File "/usr/lib/python3.5/asyncio/base_events.py", line 387, in
run_until_complete
    return future.result()   File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception   File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step
    result = coro.throw(exc)   File "/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/proxybroker/api.py",
line 108, in find
    await self._run(self._checker.check_judges(), action)   File "/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/proxybroker/api.py",
line 114, in _run
    await tasks   File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__
    yield self  # This tells Task to wait for completion.   File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup
    future.result()   File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception   File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step
    result = coro.throw(exc)   File "/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/proxybroker/checker.py",
line 26, in check_judges
    await asyncio.gather(*[j.check() for j in self._judges])   File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__
    yield self  # This tells Task to wait for completion.   File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup
    future.result()   File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
    raise self._exception   File "/usr/lib/python3.5/asyncio/tasks.py", line 239, in _step
    result = coro.send(None)   File "/home/sebastian/PycharmProjects/STW/venv/lib/python3.5/site-packages/proxybroker/judge.py",
line 82, in check
    j=self, code=resp.status, page=page[0], IndexError: string index out of range  

Я использую python3.5.2 и обновленные версии proxybroker (0.1.4) aiohttp (1.0.2) asyncio (3.4.3).

Я не уверен, что вызывает ошибку, поскольку я не менял пример кода, и, насколько я знаю, я установил все зависимости. Кто-нибудь может мне помочь и сказать, что я делаю не так, и даже лучше, как это сделать правильно?

Редактировать
Быстрое решение проблемы заключается в изменении строки, в которой возникает ошибка. Эта строка предназначена только для регистрации ошибки, поэтому изменение не должно нанести никакого вреда. Для этого обходного пути — не решения — я добавил дополнительную проверку в судье.py в строке 79, где ранее возникло исключение. Локально я изменил его на:

         if isinstance(page, type(list())) or isinstance(page, type(dict())):
            log.error(('{j} is failed. HTTP status code: {code}; '
                       'Real IP on page: {ip}; Version: {word}; '
                       'Response: {page}').format(
                j=self, code=resp.status, page=page[0],
                ip=(get_my_ip() in page), word=(rv in page)))
        else:
            log.error(('{j} is failed. HTTP status code: {code}; '
                       'Real IP on page: {ip}; Version: {word}; '
                       'Response: {page}').format(
                      j=self, code=resp.status, page=page,
                      ip=(get_my_ip() in page), word=(rv in page)))
  

Таким образом, я могу снова использовать proxybroker. Проблема зарегистрирована на gihub с помощью proxybroker.

Ответ №1:

Предупреждения об устаревании безвредны (по крайней мере, если я не удалю такую обратную совместимость).

Ошибка просто говорит, что getproxy.net это недоступно — это ваша главная проблема.

Комментарии:

1. Итак, могу ли я что-нибудь с этим поделать, потому что, если я попытаюсь зайти getproxy.net через браузер, сайт будет доступен.

2. Я не знаю. Попробуйте создать проблему в github.com/constverum/ProxyBroker/issues

3. Спасибо за вашу помощь. Чтобы иметь возможность работать дальше, я в настоящее время внедряю запасной вариант, который использует другой пакет python под названием freeproxy . Кажется, это очень хорошая альтернатива, которая также находит довольно много прокси (выше 5000, хотя еще не проверена на статус), и, прежде всего, ее очень легко расширить. Итак, для всех остальных, кто тестировался в alteratives, это то место, куда нужно идти.

Ответ №2:

В настоящее время существует проблема с:

 <Judge [HTTP] www.ingosander.net> is failed. HTTP status code: 302; Real IP on page: False; Version: False; Response:
  

Содержимое ответа пустое, потому что оно перенаправлено (код состояния: 302).

Возможные решения: 1. Измените http-клиент. Используйте пакет запросов — автоматически следует за перенаправлениями. 2. Измените ведение журнала ошибок для добавления перенаправленных URL-адресов

 elif (resp.status == 302):
    log.error(('{j} is failed. HTTP status code: {code}; '
               'Real IP on page: {ip}; Version: {word}; '
               'Response: {page}').format(
              j=self, code=resp.status, page=None,
              ip=(get_my_ip() in page), word=(rv in page)))
  

в judge.py

  1. Прокомментируйте это суждение в списке судей внизу judge.py