CentOS7上使用mod_wsgi部署Django
Django是一个非常强大的web框架,能让你快速的构建应用,它本身包含了一个简单的服务器程序,让你在开发环境里调试用。 但是在生产环境中就需要将其部署到更专业的web服务器里去了,比如Apache、Nginx等。
对于Django这个框架的教程我之前的博客已经有一个系列了,这里就不多说,我假设你已经创建好了一个Django工程, 这里我已自己的zspace工程来说明。
Django是一个非常强大的web框架,能让你快速的构建应用,它本身包含了一个简单的服务器程序,让你在开发环境里调试用。 但是在生产环境中就需要将其部署到更专业的web服务器里去了,比如Apache、Nginx等。
对于Django这个框架的教程我之前的博客已经有一个系列了,这里就不多说,我假设你已经创建好了一个Django工程, 这里我已自己的zspace工程来说明。
开篇我先解释一下两个容易搞混的术语:
所以,弄清楚之后才发现只有一个字母的差别,但是这两个东东一毛钱的关系都没有,^_^
跟Java的Servlet协议和EJB协议类似,OSGi协议定义了两件事:一组OSGi容器必须实现的服务,以及容器和你的应用程序之间的接口标准。 也许你会搞不懂为什么我们已经有了Servelt容器来构建Web应用程序,有了EJB容器来构建企业级事务应用程序,那我们还要这个OSGi容器干嘛? 简单来讲就是OSGi容器是特地用来开发非常复杂的大型Java应用程序的,你需要将系统分解成很多个模块。
前面我们介绍的都是去抓取静态的网站页面,也就是说我们打开某个链接,它的内容全部呈现出来。 但是如今的互联网大部分的web页面都是动态的,经常逛的网站例如京东、淘宝等,商品列表都是js,并有Ajax渲染, 下载某个链接得到的页面里面含有异步加载的内容,这样再使用之前的方式我们根本获取不到异步加载的这些网页内容。
使用Javascript渲染和处理网页是种非常常见的做法,如何处理一个大量使用Javascript的页面是Scrapy爬虫开发中一个常见的问题, 这篇文章将说明如何在Scrapy爬虫中使用scrapy-splash来处理页面中得Javascript。
有时候爬取网站的时候需要登录,在Scrapy中可以通过模拟登录保存cookie后再去爬取相应的页面。这里我通过登录github然后爬取自己的issue列表来演示下整个原理。
要想实现登录就需要表单提交,先通过浏览器访问github的登录页面https://github.com/login,然后使用浏览器调试工具来得到登录时需要提交什么东西。
我这里使用chrome浏览器的调试工具,F12打开后选择Network,并将Preserve log勾上。我故意输入错误的用户名和密码,得到它提交的form表单参数还有POST提交的UR
去查看html源码会发现表单里面有个隐藏的authenticity_token
值,这个是需要先获取然后跟用户名和密码一起提交的。
本篇主要介绍两种部署爬虫的方案。如果仅仅在开发调试的时候在本地部署跑起来是很容易的,不过要是生产环境,爬虫任务量大,并且持续时间长,那么还是建议使用专业的部署方法。主要是两种方案:
Scrapy为我们提供了可重用的item pipelines为某个特定的Item去下载文件。 通常来说你会选择使用Files Pipeline或Images Pipeline。
这两个管道都实现了:
Scrapy使用Python内置的的日志系统来记录事件日志。
日志配置
1 | LOG_ENABLED = true |
当一个item被蜘蛛爬取到之后会被发送给Item Pipeline,然后多个组件按照顺序处理这个item。 每个Item Pipeline组件其实就是一个实现了一个简单方法的Python类。他们接受一个item并在上面执行逻辑, 还能决定这个item到底是否还要继续往下传输,如果不要了就直接丢弃。
使用Item Pipeline的常用场景: