因为scrapy-redis里面有两个spider,一个basespider,一个crawlspider;有人分不清他们的区别;本文就来掰一掰他们的事;
`Spider` 类是 Scrapy 中最基本的爬虫类,提供了处理请求和解析响应的基本功能。而 `CrawlSpider` 类是基于 `Spider` 类的扩展,提供了更方便的机制用于定义和跟踪规则,使得爬取复杂网站的操作更加简单。如果你的爬虫需要根据特定的规则进行链接提取和页面抓取,`CrawlSpider` 类可能是更适合的选择。但如果你只需要简单的页面抓取和数据提取,`Spider` 类已经足够了。
那么,
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class QuotesCrawler(CrawlSpider):
name = "quotes_crawler"
start_urls = ["http://quotes.toscrape.com/"]
allowed_domains = ["quotes.toscrape.com"]
rules = (
Rule(LinkExtractor(restrict_xpaths="//a[@class='tag']"), follow=True),
Rule(LinkExtractor(restrict_xpaths="//div[@class='quote']/span/a"), callback='parse_quote'),
)
def parse_quote(self, response):
quote = {
'text': response.xpath("//h1/text()").get(),
'author': response.xpath("//h3/text()").get(),
'tags': response.xpath("//div[@class='tags']/a/text()").getall(),
}
yield quote
我们创建了一个名为 QuotesCrawler 的爬虫类,继承自 CrawlSpider。我们的目标是爬取名言网站(http://quotes.toscrape.com/)上的名言和标签。
通过使用 CrawlSpider 和 rules,我们只需定义规则和回调函数,而无需编写大量的链接提取和跟进的代码。这样,Scrapy 会自动根据规则进行页面抓取和处理,大大减少了编写重复代码的工作量。同时,当网站结构变化时,我们只需修改规则,而不是整个爬虫逻辑。
--------也就是说,crawlspider的一个rules能减少抓取数据的代码量,方便管理;补:可能前些年还好,现在越来越多的网站开始各种css渲染/js渲染生成页面数据,你真用rules去搞,抓出来的好多都牛头不对马嘴; ?
----这里想说的是,最好别链接! 链了感觉抓全了,你稍微一个不注意,抓一堆广告下来;徒增了负载...能手写,尽量手写~ 当然,你做搜索引擎,可是适当跟进,反正你服务器容量大,随便搞呗,宁可错抓1000不能放错一个.对吧...