一、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新闻演示
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/197448.html
微信扫一扫
支付宝扫一扫