Scripy特点:
是一个用python实现的为了爬取网站数据、提取数据的应用框架scrapy使用的Twisted异步网络库来处理网络通讯
使用scrapy框架可以高效(爬取效率和开发效率)完成数据爬取
scrapy安装:
python -m pip install scrapy
scrapy架构图
scrapy五大组件及作用
引擎(Engine):整个框架核心
调度器(Scheduler):维护请求队列
下载器(Downloader):获取响应对象
爬虫文件(Spider):数据解析提取
项目管道(Pipeline):数据入库处理
两个中间件及作用:
下载器中间件(Downloader Middlewares)
请求对象 -> 引擎 -> 下载器,包装请求(随机代理等)
蜘蛛中间件(Spider Middlewares)
响应对象 -> 引擎 -> 爬虫文件,可修改响应对象属性
scrapy工作流程
工作流程描述 - 爬虫项目正式启动
引擎向爬虫程序索要第一批要爬取的URL,交给调度器入队列
调度器处理请求后出队列,通过下载器中间件交给下载器去下载
下载器得到响应对象后,通过蜘蛛中间件交给爬虫程序
爬虫程序进行数据爬取:
数据交给管道文件去入库处理
对于需要继续跟进的URL,再次交给调度器入队列,如此循环
scrapy常用命令
创建爬虫项目:scrapy startproject 项目名
创建爬虫文件:scrapy genspider 爬虫文件名 允许爬取的域名
运行爬虫项目:scrapy crawl 爬虫名
项目目录结构:
项目完成步骤
新建项目和爬虫文件
定义要爬取的数据结构:items.py
完成爬虫文件数据解析提取:爬虫文件名.py
管道文件进行数据处理:pipelines.py
对项目进行全局配置:settings.py
pycharm运行爬虫项目:run.py
settings.py常用配置
设置User-Agent:USER_AGENT=" "
设置最大并发数(默认为16):CONCURRENT_REQUESTS=32
下载延迟时间(每隔多久访问一个网页):DOWNLOAD_DELAY=0.1
请求头:DEFAULT_REQUEST_HEADERS={}
设置日志级别:LOG_LEVEL=" "
保存到日志文件:LOG_FILE="xxx.log"
设置数据导出编码:FEED_EXPORT_ENCODING=" "
项目管道 - 优先级为1--1000,数字越小优先级越高
ITEM_PIPELINES={'项目目录名.pipelines.类名':优先级}
cookie(默认禁用,取消注释--True|False都为开启)
COOKIES_ENABLED=False
下载器中间件
DOWNLOADER_MIDDLEWARES={"项目目录名.middlewares.类名":优先级}
items.py详解
scrapy提供了item类,可以自定义爬取字段
item类似我们常说的字典,我们需要抓取哪些字段直接在此处定义即可,当爬虫文件中对item类进行实例化后,会有方法将数据交给管道文件处理
import scrapy
class MaoyanItem(scrapy.Item):
# define the fields for your item here like:
name=scrapy.Field()
star=scrapy.Field()
time=scrapy.Field()
常用配置
name:爬虫名,当运行爬虫项目时使用
allowed_domains:允许爬取的域名,非本域的URL地址会被过滤
start_urls:爬虫项目启动时起始的URL地址
import scrapy
class BaiduSpider(scrapy.Spider):
name='baidu'
allowed_domains=['www.baidu.com']
start_urls=['http://www.baidu.com/']
def parse(self,response):
pass
爬虫文件运行流程描述
爬虫项目启动,引擎找到此爬虫文件,讲start_urls中的URL地址拿走交给调度器入队列,然后出队列交给下载器下载,得到response
response通过引擎又交还给了此爬虫文件,parse函数中的参数即是
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)