1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lxncy-asyncpy

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

asyncpy

Use asyncio and aiohttp's concatenated web crawler framework

Asyncpy — это лёгкий и эффективный фреймворк для создания веб-краулеров, разработанный на основе asyncio и aiohttp. Он использует архитектурный паттерн scrapy и включает в себя логику обработки данных из некоторых открытых исходных кодов с GitHub.


Обновления

  • 1.1.7: исправлена ошибка, возникающая при завершении цикла событий.
  • 1.1.8: в файле spider больше не нужно вручную импортировать settings_attr.

Использование документации: https://blog.csdn.net/weixin_43582101/article/details/106320674.

Примеры применения: https://blog.csdn.net/weixin_43582101/category_10035187.html.

GitHub: https://github.com/lixi5338619/asyncpy.

PyPI: https://pypi.org/project/asyncpy/.

Архитектура и процесс работы asyncpy

вставьте изображение здесь


Установка необходимых компонентов

Python версии 3.6 или выше. Зависимости: ['lxml', 'parsel','docopt', 'aiohttp'].

Установка:

pip install asyncpy

Если установка не удалась, проверьте версию Python. Версия Python должна быть 3.6 и выше.

Если вы всё ещё не можете загрузить пакет, перейдите на [https://pypi.org/project/asyncpy/] и загрузите последнюю версию файла whl. Нажмите Download files, после загрузки используйте команду cmd для установки:

pip install asyncpy-версия-py3-none-any.whl

Создание файла паука

Введите asyncpy --version в командной строке, чтобы проверить успешность установки.

Создайте файл demo с помощью команды cmd:

asyncpy genspider demo

Глобальные настройки

Настройки Описание
CONCURRENT_REQUESTS Количество одновременных запросов
RETRIES Количество попыток
DOWNLOAD_DELAY Задержка загрузки
RETRY_DELAY Задержка повторной попытки
DOWNLOAD_TIMEOUT Ограничение по времени
USER_AGENT Универсальный пользовательский агент
LOG_FILE Путь к файлу журнала
LOG_LEVEL Уровень журнала
PIPELINES Конвейер
MIDDLEWARE Промежуточное ПО

До версии 1.1.8, если необходимо запустить глобальные настройки, необходимо передать settings через settings_attr в файл spider:

import settings
class DemoSpider(Spider):
    name = 'demo'
    start_urls = []
    settings_attr = settings

В новой версии нет необходимости вручную передавать settings.


Пользовательские настройки

Если вам нужно настроить отдельные файлы пауков, вы можете импортировать custom_settings так же, как в scrapy. Это не противоречит settings_attr.

class DemoSpider2(Spider):
    name = 'demo2'

    start_urls = []

    concurrency = 30                                # Количество одновременных запросов

    custom_settings = {
        "RETRIES": 1,                               # Количество попыток
        "DOWNLOAD_DELAY": 0,                        # Задержка загрузки
        "RETRY_DELAY": 0,                           # Задержка повторной попытки
        "DOWNLOAD_TIMEOUT": 10,                     # Ограничение по времени
        "LOG_FILE":"demo2.log"                      # Файл журнала
            }

Генерация файлов журнала

Добавьте следующие строки в файл настроек:

LOG_FILE = './asyncpy.log'
LOG_LEVEL = 'DEBUG'

Чтобы создать несколько файлов журналов для нескольких пауков, удалите настройки журнала из файла настроек и настройте их снова в custom_settings.


Промежуточное программное обеспечение

Создайте новый файл middleware с именем demo_middleware и добавьте новые функции. Вы можете выполнять операции, основанные на request.meta и свойствах паука.

from asyncpy.middleware import Middleware

middleware = Middleware()

@middleware.request
async def UserAgentMiddleware(spider, request):
    if request.meta.get('valid'):
        print("Текущее имя паука:%s"%spider.name)
        ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36"
        request.headers.update({"User-Agent": ua})


@middleware.request
async def ProxyMiddleware(spider, request):
    if spider.name == 'demo':
        request.aiohttp_kwargs.update({"proxy": "http://123.45.67.89:0000"})

Метод 1: Включите конвейер в файле настроек. (На данный момент рекомендуется использовать метод 2.)

MIDDLEWARE = [
'demo_middleware.middleware',
            ]

Способ 2: Передайте middleware в start():

from middlewares import middleware
DemoSpider.start(middleware=middleware)
``` **Пользовательские конвейеры**

Если вы определили элемент (в настоящее время поддерживается только формат словаря), и в настройках включены конвейеры, то вы можете написать код для подключения к базе данных и вставки данных в конвейерах.

**В файле spider:**
```python
     item = {}
     item['response'] = response.text
     item['datetime'] = '2020-05-21 13:14:00'
     yield item

В pipelines.py:

class SpiderPipeline():

    def __init__(self):
        pass

    def process_item(self, item, spider_name):
        pass

Метод 1: включить конвейеры в settings: (обновление версии, временно выберите метод 2)

PIPELINES = [
'pipelines.SpiderPipeline',
            ]

Способ 2: передать конвейеры через start():

from pipelines import SpiderPipeline
DemoSpider.start(pipelines=SpiderPipeline)

Post запрос перезаписывает start_requests

Если вам нужно напрямую отправить post запрос, вы можете удалить элементы из start_urls и повторно использовать метод start_requests.


Анализ ответа

Используется аналитическая библиотека parse в scrapy, метод анализа такой же, как и в scrapy, поддерживает xpath, css селектор, re.

Простой пример: xpath("//div[id = demo]/text()").get() ----- получить первый элемент

xpath("//div[id = demo]/text()").getall() ----- получить все элементы, вернуть список


Запуск паука

Запустите паука в файле spider с помощью класса name.start(). Например, имя паука — DemoSpider

DemoSpider.start()

Запустить несколько пауков

Здесь нет полной доработки, можно протестировать с использованием многопроцессорной обработки.

from Demo.demo import DemoSpider
from Demo.demo2 import DemoSpider2
import multiprocessing

def open_DemoSpider2():
    DemoSpider2.start()

def open_DemoSpider():
    DemoSpider.start()

if __name__ == "__main__":
    p1 = multiprocessing.Process(target = open_DemoSpider)
    p2 = multiprocessing.Process(target = open_DemoSpider2)
    p1.start()
    p2.start()

Особая благодарность: Scrapy, Ruia, Looter, asyncio, aiohttp


Интересуетесь? github поставьте звезду, спасибо всем!

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Используйте объединённую структуру веб-краулера на основе asyncio и aiohttp! Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lxncy-asyncpy.git
git@api.gitlife.ru:oschina-mirror/lxncy-asyncpy.git
oschina-mirror
lxncy-asyncpy
lxncy-asyncpy
master