用于处理用户代理的wsgi中间件和web框架扩展。
uadetector的Python项目详细描述
用于处理用户代理的wsgi中间件和web框架扩展。由于woothee,uadetector支持各种用户代理。这个库尊重k0kubun/rack-user_agent。
安装
$ pip install uadetector
用法
wsgi中间件
这个中间件提供了一个uadetector.useragent.UserAgent对象来处理用户代理。
fromwsgiref.simple_serverimportmake_server# import middlewarefromuadetectorimportUADetectordefapp(environ,start_response):start_response('200 OK',[('Content-Type','text/plain')])# get 'UserAgent' object from environ dict.ua=environ.get('uadetector.useragent')ua.user_agent#=> "Mozilla/5.0 (Macintosh; ..."ua.device_type#=> "pc"ua.os#=> "Mac OSX"ua.browser#=> "Chrome"ua.from_pc#=> Trueua.from_smartphone#=> Falsereturn[ua.os.encode('utf-8')]# Apply middlewareapplication=UADetector(app)if__name__=="__main__":withmake_server('127.0.0.1',8000,application)asserver:print("Serving on port 8000...")server.serve_forever()
您还可以替换environ或UserAgent类的键。
fromuadetector.useragentimportUserAgentclassMyUserAgent(UserAgent):# Write your custom codes.# Apply middlewareapplication=UADetector(app,envorion_key='your.favorite.key'useragent_class='path.to.MyUserAgent')
另请参见WSGI example。
web框架扩展
一些web框架提供了一种不同于wsgi中间件的扩展方式。这个库按这种方式提供快捷方式。
警告:我不积极支持单个框架。如果您担心,应该使用wsgimiddleware。
django
您可以使用django的MIDDLEWARE。
# settings.pyMIDDLEWARE=[# Add UADetecorMiddleware'uadetector.django.middleware.UADetectorMiddleware',# ... omit ...]
# views.pydefindex_view(request):print(request.ua.from_smartphone)# => True or False# ... omit ...
自定义请求对象的属性名并替换useragent类。
# settings.pyUADETECTOR_REQUEST_PROPERTY_NAME='agent'# => You can use "request.agent"UADETECTOR_USERAGENT_CLASS='path.to.MyUserAgent'
另请参见Dajngo example。
提示:Switch templates based on User-Agent(使用django-variantmpl)。
棱锥体
您可以使用config.add_request_method。
fromuadetector.pyramidimportua_propdefindex(request):print(request.ua.from_smartphone)# => True or False# ... omit ...withConfigurator()asconfig:config.add_route('index','/')config.add_view(index,route_name='index')config.add_request_method(ua_prop(),name='ua',reify=True)# ... omit ...
自定义请求对象的属性名并替换useragent类。
config.add_request_method(ua_prop('path.to.MyUserAgent'),name='agent',# => You can use "request.agent"reify=True)
另请参见Pyramid example。
烧瓶
您可以使用Flask Extension。
fromflaskimportFlask,requestfromuadetector.flaskimportUADetectorapp=Flask(__name__)UADetector(app)@app.route('/')defindex():print(request.ua.from_smartphone)# => True or False# ... omit ...
自定义请求对象的属性名并替换useragent类。
app=Flask(__name__)app.config['UADETECTOR_USERAGENT_CLASS']='path.to.MyUserAgent'app.config['UADETECTOR_REQUEST_PROPERTY_NAME']='agent'# => You can use "request.agent"UADetector(app)
另请参见Flask example。
龙卷风
您可以使用自定义RequestHandler。
fromuadetector.tornado.webimportRequestHandlerclassIndexHandler(RequestHandler):defget(self):print(self.request.ua.from_smartphone)# => True or False# ... omit ...
自定义请求对象的属性名并替换useragent类。
fromtornado.optionsimportdefinefromuadetector.tornado.webimportRequestHandlerdefine('uadetector_request_property_name',default='agent',# => You can use "self.request.agent")define('uadetector_useragent_class',default='path.to.MyUserAgent')classIndexHandler(RequestHandler):
另请参见Tornado example。
用户代理
uadetector.useragent.UserAgent对象的属性列表。
属性
- useragent.device_变量
- useragent.device_type
- useragent.os
- useragent.os_版本
- useragent.browser
- useragent.browser_版本
- useragent.browser_供应商
助手
- 来自PC的用户代理
- 来自智能手机的useragent.
- 用户代理。来自移动电话
- useragent.from_设备
- 来自爬虫程序的useragent.
探测器
- useragent.smartphone_版本
- useragent.from_iphone
- useragent.from_ipad
- useragent.from_ipod
- 来自安卓系统的useragent.
- 来自安卓平板电脑的useragent.
- useragent.from_windows_phone
- useragent.from_ios
- android操作系统中的useragent.
提示
如果您只想从用户代理字符串获得一个UserAgent对象,请使用get_useruseragent。
fromuadetectorimportget_useragentua_string="Mozilla/5.0 (iPhone; CPU iPhone OS ..."ua=get_useragent(ua_string)us.from_smartphone# => True# Use custom useragent classua=get_useragent(ua_string,useragent_class='path.to.MyUserAgent')
支架
支持最新的3个小版本。
- Python3.4、3.5、3.6
- Django 1.10、1.11、2.0
- 金字塔1.7、1.8、1.9
- 烧瓶0.10、0.11、0.12
- 龙卷风4.5、4.6、4.7
许可证
麻省理工学院许可证