Django是一个非常强大的web框架,能让你快速的构建应用,它本身包含了一个简单的服务器程序,让你在开发环境里调试用。
但是在生产环境中就需要将其部署到更专业的web服务器里去了,比如Apache、Nginx等。
对于Django这个框架的教程我之前的博客已经有一个系列了,这里就不多说,我假设你已经创建好了一个Django工程,这里我已自己的zspace工程来说明。
生活心情
Django是一个非常强大的web框架,能让你快速的构建应用,它本身包含了一个简单的服务器程序,让你在开发环境里调试用。
但是在生产环境中就需要将其部署到更专业的web服务器里去了,比如Apache、Nginx等。
对于Django这个框架的教程我之前的博客已经有一个系列了,这里就不多说,我假设你已经创建好了一个Django工程,这里我已自己的zspace工程来说明。
前面我们介绍的都是去抓取静态的网站页面,也就是说我们打开某个链接,它的内容全部呈现出来。
但是如今的互联网大部分的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
本篇主要介绍两种部署爬虫的方案。如果仅仅在开发调试的时候在本地部署跑起来是很容易的,不过要是生产环境,爬虫任务量大,并且持续时间长,那么还是建议使用专业的部署方法。主要是两种方案:
Scrapy为我们提供了可重用的item pipelines为某个特定的Item去下载文件。
通常来说你会选择使用Files Pipeline或Images Pipeline。
这两个管道都实现了:
Images Pipeline为处理图片提供了额外的功能:
Scrapy使用Python内置的的日志系统来记录事件日志。
日志配置1
2
3
4
5
6
7LOG_ENABLED = true
LOG_ENCODING = "utf-8"
LOG_LEVEL = logging.INFO
LOG_FILE = "log/spider.log"
LOG_STDOUT = True
LOG_FORMAT = "%(asctime)s [%(name)s] %(levelname)s: %(message)s"
LOG_DATEFORMAT = "%Y-%m-%d %H:%M:%S"
使用也很简单
当一个item被蜘蛛爬取到之后会被发送给Item Pipeline,然后多个组件按照顺序处理这个item。
每个Item Pipeline组件其实就是一个实现了一个简单方法的Python类。他们接受一个item并在上面执行逻辑,还能决定这个item到底是否还要继续往下传输,如果不要了就直接丢弃。
使用Item Pipeline的常用场景:
Item是保存结构数据的地方,Scrapy可以将解析结果以字典形式返回,但是Python中字典缺少结构,在大型爬虫系统中很不方便。
Item提供了类字典的API,并且可以很方便的声明字段,很多Scrapy组件可以利用Item的其他信息。