一个为scrapy更改代理的中间件

scrapy-rotated-prox的Python项目详细描述


PyPI VersionBuild Status

概述

scrapy rotated proxy是一个动态附加代理到请求的scrapy下载中间件, 可以使用配置提供的旋转代理。 它可以暂时阻止不可用的代理IP 当代理可用时检索以供将来使用。 此外,它还可以通过剪贴信号去除无效的代理IP。 代理IP列表可以通过Spider设置、文件或MongoDB提供。

要求

  • python 2.7或python 3.3+
  • 适用于Linux、Windows、Mac OSX、BSD

安装

快捷方式:

pip install scrapy-rotated-proxy

或者将这个中间件复制到您的scrapy项目中。

配置

基本配置

启用Spider设置

启用Scrapy旋转代理中间件并通过Spider设置提供代理IP列表

# -----------------------------------------------------------------------------
# ROTATED PROXY SETTINGS (Spider Settings Backend)
# -----------------------------------------------------------------------------
DOWNLOADER_MIDDLEWARES.update({
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
    'scrapy_rotated_proxy.downloadmiddlewares.proxy.RotatedProxyMiddleware': 750,
})
ROTATED_PROXY_ENABLED = True
PROXY_STORAGE = 'scrapy_rotated_proxy.extensions.file_storage.FileProxyStorage'
# When set PROXY_FILE_PATH='', scrapy-rotated-proxy
# will use proxy in Spider Settings default.
PROXY_FILE_PATH = ''
HTTP_PROXIES = [
    'http://proxy0:8888',
    'http://user:pass@proxy1:8888',
    'https://user:pass@proxy1:8888',
]
HTTPS_PROXIES = [
    'http://proxy0:8888',
    'http://user:pass@proxy1:8888',
    'https://user:pass@proxy1:8888',
]

使用本地文件启用

启用Scrapy旋转代理中间件并通过本地文件提供代理IP列表

# -----------------------------------------------------------------------------
# ROTATED PROXY SETTINGS (Local File Backend)
# -----------------------------------------------------------------------------
DOWNLOADER_MIDDLEWARES.update({
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
    'scrapy_rotated_proxy.downloadmiddlewares.proxy.RotatedProxyMiddleware': 750,
})
ROTATED_PROXY_ENABLED = True
PROXY_STORAGE = 'scrapy_rotated_proxy.extensions.file_storage.FileProxyStorage'
PROXY_FILE_PATH = 'file_path/proxy.txt'

具有json样式的本地文件存储代理列表

# proxy file content, must conform to json format, otherwise will cause json
# load error
HTTP_PROXIES = [
    'http://proxy0:8888',
    'http://user:pass@proxy1:8888',
    'https://user:pass@proxy1:8888'
]
HTTPS_PROXIES = [
    'http://proxy0:8888',
    'http://user:pass@proxy1:8888',
    'https://user:pass@proxy1:8888'
]

使用MongoDB启用

通过MongoDB启用Scrapy Rotated Proxy中间件并提供代理IP列表

# -----------------------------------------------------------------------------
# ROTATED PROXY SETTINGS (MongoDB Backend)
# -----------------------------------------------------------------------------
# mongodb document required field: scheme, ip, port, username, password
# document example: {'scheme': 'http', 'ip': '10.0.0.1', 'port': 8080,
# 'username':'user', 'password':'password'}
DOWNLOADER_MIDDLEWARES.update({
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
    'scrapy_rotated_proxy.downloadmiddlewares.proxy.RotatedProxyMiddleware': 750,
})
ROTATED_PROXY_ENABLED = True
PROXY_STORAGE = 'scrapy_rotated_proxy.extensions.mongodb_storage.MongoDBProxyStorage'
PROXY_MONGODB_HOST = HOST_OR_IP
PROXY_MONGODB_PORT = 27017
PROXY_MONGODB_USERNAME = USERNAME_OR_NONE
PROXY_MONGODB_PASSWORD = PASSWORD_OR_NONE
PROXY_MONGODB_AUTH_DB = 'admin'
PROXY_MONGODB_DB = 'vps_management'
PROXY_MONGODB_COLL = 'service'

高级配置

块设置

默认情况下,在所有代理用完后,蜘蛛将关闭。你可以将spider配置为 等待,直到块代理变为有效,通过信号

阻止
# -----------------------------------------------------------------------------
# OTHER SETTINGS (Optional)
# -----------------------------------------------------------------------------
PROXY_SLEEP_INTERVAL = 60*60*24  # Default 24hours
PROXY_SPIDER_CLOSE_WHEN_NO_PROXY = False # Default True

信号

删除蜘蛛中从未使用过的代理,可以将信号发送到 scrapy_rotated_proxy.signals.proxy_remove,哪个信号必须包含参数 包括spiderrequestexception

在达到睡眠间隔后,可以在将来使用的块代理,您可以将信号发送到 scrapy_rotated_proxy.signals.proxy_block,哪个信号必须包含参数 包括spiderresponseexception

设置参考

SettingDescriptionDefault
ROTATED_PROXY_ENABLEDWhether to enable Scrapy-Rotated-ProxyTrue
PROXY_STORAGEA class which implements the proxy storage backendFileProxyStorage
PROXY_MONGODB_HOSTMongoDB host for MongoDB backend‘127.0.0.1’
PROXY_MONGODB_PORTMongoDB port for MongoDB backend27017
PROXY_MONGODB_USERNAMEMongoDB username for MongoDB backendNone
PROXY_MOGNODB_PASSWORDMongoDB password for MongoDB backendNone
PROXY_MONGODB_DBMongoDB database name for MongoDB backendproxy_management
PROXY_MONGODB_COLLMongoDB collection name for MongoDB backendproxy
PROXY_MONGODB_OPTIONS_*MongoDB uri options for MongoDB backend
PROXY_FILE_PATHPath of file that store proxies. default is None, means get proxies from Spider SettingsNone
HTTP_PROXIESkeywords of HTTP proxies for LocalFile backend or Spider Settings
HTTPS_PROXIESkeywords of HTTPS proxies for LocalFile backend or Spider Settings
PROXY_SLEEP_INTERVALTime to sleep for blocked proxy become available60*60*24
PROXY_SPIDER_CLOSE_WHEN_NO_PROXYWhether to close spider when run out of all proxiesTrue
PROXY_RELOAD_ENABLEDenable to reload proxy from storage when all proxies was used and prepare to cycle useFalse

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我的int值在SharedReferences中不被记住   java如何编辑Spring可分页对象?   java如何在gradle中单独调用任务   jvm以编程方式设置最大java堆大小   java如果满足多个条件,如何使用If语句计算数字?   如何在java中从json文件中获取特定值   如何在Sphinx4中为Java语音识别添加自定义语法?   java int[]copy=data;//当数据是数组时会发生什么?   java豪猪管理器。停下来。destroy()不起作用   安卓在API级别28中找不到画布变量   基于SOLID的java冗余   用于talend作业的java Liferay和portlet   从java到安卓的视频流   java获取在控件的类定义中添加自定义控件的场景大小   awt Java IndexOutOfBoundsException   java如何使用Spring JmsTemplate更改MQ头   java遍历数组并打印每个对象   java Google Map api v2标记在我旋转手机和地图“刷新”之前不会移动