一、scrapy爬虫框架图
scrapy是Python语言写成的爬虫框架,它结构清晰且具有高度的可定制化能力。以下是scrapy爬虫框架的实现原理图:
+-------------------------------------------------+ | | | Scheduler +--------+ Spider | | ---------> | | ---------> | | | Scrapy | | | Item Pipeline | Engine | Downloader | | ---------> | | <--------- | | +--------+ | | | +-------------------------------------------------+
二、scrapy爬虫框架结构主要包括
Scrapy框架主要包括以下5个组件:
1.引擎 (Scrapy Engine):负责控制各组件之间的数据流,包括调度器、下载器以及爬虫。
2.调度器 (Scheduler):负责接收引擎传递过来的数据请求,并将请求放入队列中让下载器去下载。
3.爬虫 (Spider):负责定义爬取网站的逻辑和网站如何进行解析,生成可爬取的数据及应对各种异常。
4.下载器 (Downloader):负责下载爬虫需要的网页,并将网页返回给引擎,同时支持通过配置随机更换user-agent,来防止被封禁。
5.管道 (Item Pipeline):负责处理引擎传递过来的数据,支持对数据的清洗、格式转换和持久化操作。
三、scrapy爬虫框架面试题
面试时常出以下几个问题:
1. scrapy怎么实现去重?
通过调度器和去重过滤器实现,可以利用集合、Redis、数据库等进行去重。
2. 如何对代理池进行维护?
可以使用开源框架Scrapy——ProxyPool进行维护,实现自动扫描和测试代理IP可用性,从而不断更新代理池。
3. 如何处理分页数据?
在请求中添加页码参数,并重写start_requests方法来动态生成请求,将所有数据的请求全部添加至调度器中,让调度器去调度下载器进行请求。
四、scrapy爬虫框架包含的组件
在实际爬虫开发中,我们还可以使用以下两个组件:
1.中间件 (Middleware):可以对爬取过程中的Request和Response进行处理,如添加随机User-Agent头、IP代理等。
2.扩展 (Extension):提供了一系列的扩展API,可以自定义Scrapy的各个环节的实现来完善框架。
五、scrapy爬虫框架流程
1.定义爬虫解析规则。
注:通过分析网站的查询语言,选择正确的解析方法来爬取目标信息。
2.定义数据保存管道。
注:爬取的数据可以直接保存在CSV文件、MongoDB数据库、MySQL数据库等存储介质中。
3.创建爬虫并配置参数。
注:如果需要,可以在这个阶段为爬虫添加更多的中间件和扩展。
4.启动Scrapy引擎。
注:在引擎中调用start_requests()方法启动Scrapy。
六、scrapy爬虫框架安装
1. 安装Scrapy
pip install scrapy
2. 安装Scrapy-Redis (可选)
pip install scrapy-redis
七、scrapy爬虫框架有几个模块
Scrapy 框架主要有以下几个子模块:
1. scrapy.spiders:爬虫模块
2. scrapy.selector:XPath 和 CSS 查询器
3. scrapy.exceptions:异常处理模块
4. scrapy.utils:包含一些常用的 Scrapy 工具类
八、scrapy爬虫框架不指定域名可以吗
可以,Scrapy 爬虫框架允许爬取一个或多个指定的域名的网页,也可以在不指定域名的情况下进行爬取。在 spiders/ 目录下创建一个名为 argument.py 文件:
# -*- coding: utf-8 -*- import scrapy from scrapy.http import Request class ArgumentSpider(scrapy.Spider): name = 'argument' def start_requests(self): # 定义爬取的URL列表 urls = [ 'http://www.example.com/', 'http://www.example.org/', 'http://www.example.net/', ] for url in urls: yield Request(url=url, callback=self.parse) def parse(self, response): """ 解析函数 """ pass
九、scrapy爬虫框架获取虎扑nba
以获取虎扑NBA新闻为例:
1.创建项目。
scrapy startproject huPu
2.在huPu/spiders目录下创建hupu.py文件:
import scrapy class HupuSpider(scrapy.Spider): name = 'hupu' #爬虫运行的起始url allowed_domains = ['voice.hupu.com'] start_urls = ['https://voice.hupu.com/nba/1'] def parse(self, response): #所有的帖子列表 post_list = response.xpath('//div[@class="news-list"]/ul/li') for post in post_list: item = {} #标题 item['title'] = post.xpath('./a/text()').extract_first() #链接 item['href'] = post.xpath('./a/@href').extract_first() #时间 item['date'] = post.xpath('./span/text()').extract_first() #爬取详情页 yield scrapy.Request(url=item['href'], callback=self.parse_detail, meta={'item': item}) #翻页,-1表示去掉下一页 next_url = response.xpath('//div[@class="page"]/a[@class="hp-next-page"]/@href') if next_url: url = 'https://voice.hupu.com/nba/' + next_url.extract_first().strip('/') yield scrapy.Request(url=url, callback=self.parse) def parse_detail(self, response): item = response.meta['item'] #详情 item['detail'] = response.xpath('//div[contains(@class,"artical-content")]/text() | //div[contains(@class,"artical-content")]/p/text()').extract() yield item
3.执行爬虫。
scrapy crawl hupu
十、python爬虫框架scrapy选取相关小标题
1. scrapy结构图
2. scrapy包含的组件
3. scrapy的使用面试题
4. scrapy的启动流程
5. scrapy安装方法
6. scrapy包含的几个模块
7. scrapy不指定域名可不可以爬取
8. scrapy爬取虎扑nba新闻演示