Home avatar

个人知识星球,专注于全栈开发和AI应用

Scrapy笔记08- 文件与图片

Scrapy为我们提供了可重用的item pipelines为某个特定的Item去下载文件。 通常来说你会选择使用Files Pipeline或Images Pipeline。

这两个管道都实现了:

  • 避免重复下载
  • 可以指定下载后保存的地方(文件系统目录中,Amazon S3中)

Images Pipeline为处理图片提供了额外的功能:

Scrapy笔记07- 内置服务

Scrapy使用Python内置的的日志系统来记录事件日志。

日志配置

1
2
3
4
5
6
7
LOG_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"

使用也很简单

Scrapy笔记06- Item Pipeline

当一个item被蜘蛛爬取到之后会被发送给Item Pipeline,然后多个组件按照顺序处理这个item。 每个Item Pipeline组件其实就是一个实现了一个简单方法的Python类。他们接受一个item并在上面执行逻辑, 还能决定这个item到底是否还要继续往下传输,如果不要了就直接丢弃。

Scrapy笔记05- Item详解

Item是保存结构数据的地方,Scrapy可以将解析结果以字典形式返回,但是Python中字典缺少结构,在大型爬虫系统中很不方便。

Item提供了类字典的API,并且可以很方便的声明字段,很多Scrapy组件可以利用Item的其他信息。

Scrapy笔记04- Selector详解

在你爬取网页的时候,最普遍的事情就是在页面源码中提取需要的数据,我们有几个库可以帮你完成这个任务:

  1. BeautifulSoup是python中一个非常流行的抓取库, 它还能合理的处理错误格式的标签,但是有一个唯一缺点就是:它运行很慢。
  2. lxml是一个基于ElementTree 的XML解析库(同时还能解析HTML), 不过lxml并不是Python标准库

而Scrapy实现了自己的数据提取机制,它们被称为选择器,通过XPathCSS表达式在HTML文档中来选择特定的部分

Scrapy笔记03- Spider详解

Spider是爬虫框架的核心,爬取流程如下:

  1. 先初始化请求URL列表,并指定下载后处理response的回调函数。初次请求URL通过start_urls指定,调用start_requests() 产生Request对象,然后注册parse方法作为回调
  2. 在parse回调中解析response并返回字典,Item对象,Request对象或它们的迭代对象。Request 对象还会包含回调函数,之后Scrapy下载完后会被这里注册的回调函数处理。
  3. 在回调函数里面,你通过使用选择器(同样可以使用BeautifulSoup,lxml或其他工具)解析页面内容,并生成解析后的结果Item。
  4. 最后返回的这些Item通常会被持久化到数据库中( 使用Item Pipeline) 或者使用Feed exports将其保存到文件中。

尽管这个流程适合于所有的蜘蛛,但是Scrapy里面为不同的使用目的实现了一些常见的Spider。下面我们把它们列出来。