Spider 类定义了如何爬取某个网站。包括爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。
Spider 的执行流程:
- 以设置的 URL 初始化 Request,设置回调函数,Request 下载完毕返回时,生成 Response,并作为参数传给回调函数,Response 里面包含了所有想要的数据。Spider 中初始的 Request 通过 start_requests() 来获取, start_requests() 读取 start_urls 中的URL, 生成 Request 并把 parse() 作为回调函数。
- 在回调函数中处理返回内容,可以使用 XPath 或者 CSS,处理后的数据封装到 Item 对象里面
- 通过 Item Pipelinme 存入数据库,也可以使用 Feed exports 存入文件中
scrapy.Spider
最简单的 Spider,其他的 Spider 都继承该类
单个回调函数中返回多个 Request 以及 Item 的例子:
1 | import scrapy |
name
字符串类型,定义 spider 的名称
allowed_domains
要爬取的域名列表,当 OffsiteMiddleware 开启后,不在列表中的域名将不会被跟进
OffsiteMiddleware 过滤出不由该 spider 负责的 URL。
start_urls
要爬取的具体 URL 列表
make_request_from_url(url)
该方法接受一个URL并返回用于爬取的 Request 对象。 该方法在初始化request时被 start_requests() 调用,也被用于转化url为request。
start_requests()
该方法必须返回一个可迭代对象(iterable)。该对象包含了 Spider 用于爬取的 Requestparse(response)
当 Response 没有指定回调函数时,该方法是 Scrapy 处理下载的 Response 的默认方法,它负责处理 response 并返回处理的数据以及跟进的 URLlog(message[, level, component])
使用 scrapy.log.msg() 方法记录 (log)message,log 中自动带上该spider的 name 属性
closed(reason)
当spider关闭时,该函数被调用。该方法提供了一个替代调用signals.connect()来监听 spider_closed 信号的快捷方式
CrawlSpider
CrawlSpider 可以自定义规则来跟进指定的 URL,除了继承了 Spider 的全部属性,它还提供了新的属性:
rules
一个包含一个(或多个) Rule 对象的集合(list),如果多个 Rule 匹配了相同的连接,该列表中的第一个会被使用
parse_start_url(response)
当start_url的请求返回时,该方法被调用。 该方法分析最初的返回值并必须返回一个 Item 对象或者 一个 Request 对象或者 一个可迭代的包含二者对象
评论