Scrapy 是一个快速的高级网络爬虫和网络抓取框架,用于 抓取网站并从其页面中提取结构化数据。它可以被使用 用途广泛,从数据挖掘到监控和自动化 测试。
scrapy官网学习网址:https://docs.scrapy.org/en/latest/
'''
Scrapy是一个Python编写的开源网络爬虫框架,它的五大核心组件包括:
1.引擎(Engine):是Scrapy的核心,负责控制整个爬虫流程的运行,包括调度器(Scheduler)、下载器(Downloader)和管道(Pipeline)等组件的协调工作。
2.调度器(Scheduler):负责接受引擎发送过来的请求,并将其加入到队列中,队列会自动去重,等待下载器进行下载。同时,调度器还会根据一定的策略,从队列中选择一定数量的请求发送给下载器进行处理。
3.下载器(Downloader):负责将调度器发送过来的请求进行处理,并将响应数据返回给引擎。下载器还可以处理一些请求的中间件,如代理、用户代理等。
4.爬虫(Spider):负责定义爬取网站的规则,包括起始URL、如何跟踪链接、如何解析页面等。爬虫会将爬取到的数据交给管道进行处理。
5.管道(Pipeline):负责处理爬虫爬取到的数据,包括清洗、去重、存储等。管道可以定义多个,用于对不同类型的数据进行处理
工作流程:
引擎先获取爬虫文件的起始url连接,传递给调度器,由调度器进行安排顺序(同时去除重复连接),之后便让引擎给下载器,引擎给下载器的需要过下载中间件的手,该做代理做代理,该换请求头换请求头,下载器拿到包装好的需要请求的东西,向互联网进行请求,获取下载来的数据(response)给下载中间件,下载中间件过一手让引擎给爬虫文件,爬虫文件开始解析,如果还需要请求的,再重复上面的步骤,需要存储的,通过item给管道,管道开始存储,保存为Mysql,Mongodb,csv等
'''
items.py : 管道文件,用来传输文件到pipelines.py进行保存
middlewares.py : 中间件,可以用来设置ua,ip代理,selenium等等等,可为 Scrapy 添加其他功能。我们可以将很多开源中间件附加到 Scrapy 以获得额外的功能。
pipelines.py:保存文件的地方,可以把管道文件传输过来的数据进行保存,保存为Mysql,mongodb,csv等等等
settings.py:设置爬虫的地方,像管道保存是否开启,日志输出等等等
spiders下的爬虫文件:是我们核心的文件,用来爬取数据,分析数据的文件
首先安装scrapy
# 使用清华源安装scrapy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Scrapy
前提:路径切换 cd
需要cd到你准备放scrapy的文件下
1. 创建scrapy项目
scrapy startproject 项目名
例:
scrapy startproject douban
创建后显示这个样就成功了
他的意思是让我们创建爬虫文件,因为爬虫文件需要我们输入爬虫名字和域名
2.1 先cd到路径
cd douban
2.2 创建爬虫程序
scrapy genspider example example.com
scrapy genspider:固定的
example:爬虫程序的名字(不固定的) 不能和项目名一样
example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的
例:
目标url:https://www.douban.com/doulist/124084417/?start=0&sort=seq&playable=0&sub_type=
scrapy genspider douban_data www.douban.com
douban_data.py 解读
import scrapy # 导入模块
# 爬虫类,项目启动后会自动运行这个类
class DoubanDataSpider(scrapy.Spider):
# 爬虫程序的名字
name = 'douban_data'
# 可以爬取的范围
# 有可能我们在实际进行爬取的时候 第一页可能是xxx.com 第三页可能就变成了xxx.cn
# 或者xxx.yy 那么可能就会爬取不到数据
# 所以我们需要对allowed_domains进行一个列表的添加
allowed_domains = ["www.douban.com"]
# 起始url地址 会根据我们的allowed_domains对网页前缀进行一定的补全
# 但有时候补全的url不对 所以我们也要去对他进行修改
start_urls = ["https://www.douban.com"]
# 专门用于解析数据的
def parse(self, response):
pass
scrapy启动之前需要先设置
关于settings文件点击查看 Scrapy_settings配置文件设置
settings.py 设置
# 设置UA,但不常用,一般都是在MiddleWare中添加
from fake_useragent import UserAgent
USER_AGENT = UserAgent().random
# 遵循robots.txt中的爬虫规则
ROBOTSTXT_OBEY = False# 需要改成False,要不然很多东西爬不了
这里先随便设置一个UA,后面会详细讲解,目前在不保存文件的情况下,只需要更改这两个设置就可以了
在设置好之后,我们在简单写一下爬虫文件
douban_data.py
import scrapy
class DoubanDataSpider(scrapy.Spider):
name = "douban_data"
allowed_domains = ["www.douban.com"]
# 把url换成我们需要爬取的
start_urls = ["https://www.douban.com/doulist/124084417/?start=0&sort=seq&playable=0&sub_type="]
# 爬虫函数 添加**kwargs就不会报黄
def parse(self, response,**kwargs):
print(response)
print(response.text)
爬虫文件我们只修改了要爬取的url
打印响应的数据
接下来就可以启动项目了
启动项目有三种方法
在项目的终端输入启动命令
4. 执行爬虫程序
scrapy crawl example
scrapy crawl:固定的
example:执行的爬虫程序的名字,就是创建爬虫程序scrapy genspider example example.com
例:
scrapy crawl douban_data
可以看到启动成功,但是他在终端不能选择数据啥的,及其的不方便
在settings同级文件下创建一个启动项目的文件
start.py文件
# 第一种
from scrapy import cmdline
cmdline.execute("scrapy crawl douban_data".split())
# # 启动不带日志第一种方法
# --nolog 关闭日志文件输出
# cmdline.execute('scrapy crawl douban_data --nolog'.split()) # 启动爬虫命令
# 启动不带日志第二种方法
# -s LOG_ENABLED=False 关闭日志文件输出
# cmdline.execute('scrapy crawl douban_data -s LOG_ENABLED=False'.split()) # 启动爬虫命令
# 第二种
# 使用系统模块的system函数运行命令
import os
# os.system('scrapy crawl douban_data') # 启动爬虫命令
# 启动不带日志第一种方法
# --nolog 关闭日志文件输出
# os.system('scrapy crawl douban_data --nolog') # 启动爬虫命令
# 启动不带日志第二种方法
# -s LOG_ENABLED=False 关闭日志文件输出
# os.system('scrapy crawl douban_data -s LOG_ENABLED=False') # 启动爬虫命令
这里给大家列举好了,随便选一种取消注释运行即可
关于日志输出,可以在启动时临时设置
也可以在settings文件永久设置
1. 创建scrapy项目
scrapy startproject 项目名
例:scrapy startproject douban
2.1 先cd到路径
cd douban
2.2 创建爬虫程序
scrapy genspider example example.com
scrapy genspider:固定的
example:爬虫程序的名字(不固定的) 不能和项目名一样
example.com:可以允许爬取的范围(不固定的) 是根据你的目标url来指定的 其实很重要 后面是可以修改的
例:目标url:https://www.douban.com/doulist/124084417/?start=0&sort=seq&playable=0&sub_type=
scrapy genspider douban_data www.douban.com
4. 执行爬虫程序
scrapy crawl example
scrapy crawl:固定的
example:执行的爬虫程序的名字,就是创建爬虫程序scrapy genspider example example.com
例:scrapy crawl douban_data
可以通过start.py文件执行爬虫项目:
from scrapy import cmdline
cmdline.execute("scrapy crawl bd".split())
scrapy其实就是把我们平时写的爬虫进行了四分五裂式的改造. 对每个功能进行了单独的封装, 并且, 各个模块之间互相的不做依赖. 一切都由引擎进行调配. 这种思想希望你能知道. 让模块与模块之间的关联性更加的松散. 这样我们如果希望替换某一模块的时候会非常的容易. 对其他模块也不会产生任何的影响。
下一篇文章讲Scrapy的管道文件,以及Scrapy翻页处理和scrapy请求二级网址