Scrapy 框架
Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
异步:调用在发出之后,这个调用就直接返回,不管有无结果
非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。
Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),
Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
Downloader Middlewares(下载中间件):可以自定义扩展下载功能的组件(代理、cokies等)。
Spider Middlewares(Spider中间件):可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)。
各文件作用
spiders:爬虫文件,提取数据和URL
items.py:定义要获取的目标
middleware.py:爬虫中间件和下载中间件
pipelines.py:管道文件
settings.py:设置文件,配置信息
scrapy.cfg:配置文件
yield: 的就是一个生成器,带有yeild的函数遇到yeild的时候就返回一个迭代值,下次迭代时,代码从 yield 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。
创建爬虫项目
scrapy startproject 项目名
新建爬虫文件
scrapy genspider 项目名 项目的域
数据持久化
存入MySQL数据库或MongoDB数据库,做数据持久化处理
在pipelines.py文件中,进行数据的清洗和持久化,并在settings.py文件中激活管道
Request相关参数介绍
url: 就是需要请求,并进行下一步处理的url
callback: 指定该请求返回的Response
headers: 请求头
cookies: cookies,模拟用户登录需要指定用户的cookies,字典dict型
meta: 比较常用,在不同的请求之间传递数据使用的。字典dict型
Response相关参数介绍
status: 响应码
url:响应url
self.request(request对象)
self.headers(响应头)
创建爬虫文件
scrapy genspider -t crawl 爬虫文件 域名
在rules中包含一个或多个Rule对象,如果多个rule匹配了相同的链接,第一个会被使用。
参数
link_extractor:是一个Link Extractor对象,用于定义需要提取的链接。
callback: 回调函数
follow:是否跟进,follow 默认设置为True
process_links:指定spider中哪个的函数将会被调用,该方法主要用来过滤。
process_request:指定处理函数,根据该Rule提取到的每个Request时,该函数将会被调用,可以对Request进行处理,该函数必须返回Request或者None
通常防止爬虫被反:
动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息)
禁用Cookies(前提是爬取的网站不需要cookies参数)
使用cookies池
自定义中间件
设置延迟下载(降低访问网站的频率)
使用IP代理地址池
爬虫的持久化
scrapy crawl 爬虫名称 -s JOBDIR=crawls/爬虫名称
注意Cookies 的有效期,请求序列化
Settings.py 设置文件参数
爬虫的文件路径
SPIDER_MODULES = ['ziruproject.spiders']
NEWSPIDER_MODULE = 'ziruproject.spiders'
用户代理,一般设置这个参数用来伪装浏览器请求
USER_AGENT = ''
是否遵守ROBOT协议,为False时,表示不遵守(默认为True)
ROBOTSTXT_OBEY = True
Scrapy downloader(下载器) 处理的最大的并发请求数量,默认: 16
CONCURRENT_REQUESTS
下载延迟的秒数,用来限制访问的频率,默认为:0
DOWNLOAD_DELAY
每个域名下能够被执行的最大的并发请求数据量,默认为:8
CONCURRENT_REQUESTS_PER_DOMAIN
是否要携带cookies,一般情况下,不是必须要携带cookies的请求,我们将这个参数设置为False,默认为: True
COOKIES_ENABLED
查看请求是否携带cookies,追踪cookies
True:表示追踪,False 不追踪,默认为:False 不追踪
COOKIES_DEBUG
设置默认的请求头
DEFAULT_REQUEST_HEADERS
爬虫中间件
SPIDER_MIDDLEWARES
下载中间件
DOWNLOADER_MIDDLEWARES
我们可以在这个参数下自定义扩展
EXTENSIONS
设置并激活管道文件,为了存储数据使用,后面的数字表示优先级,数字越小,优先级越高
ITEM_PIPELINES
下载器超时时间(单位: 秒)默认: 180
DOWNLOAD_TIMEOUT
自动限速(AutoThrottle)扩展
该扩展能根据Scrapy服务器及您爬取的网站的负载自动限制爬取速度。
数据缓存:
目的:用来将已经发送的请求缓存下来,一遍后续使用
是否启用缓存策略
HTTPCACHE_ENABLED = True
缓存超时时间
HTTPCACHE_EXPIRATION_SECS = 0
缓存保存路径
HTTPCACHE_DIR = 'httpcache'
缓存忽略的Http状态码
HTTPCACHE_IGNORE_HTTP_CODES = []
缓存存储的插件
HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
关于日志信息的设置
LOG_ENABLED 默认: True
是否启用logging。
LOG_ENCODING
log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG 。
- CRITICAL - 严重错误(critical)
- ERROR - 一般错误(regular errors)
- WARNING - 警告信息(warning messages)
- INFO - 一般信息(informational messages)
- DEBUG - 调试信息(debugging messages)
LOG_FILE
默认: None
logging输出的文件名。如果为None,则使用标准错误输出(standard error)。
Logging使用
Scrapy提供了log功能,可以通过 logging 模块使用。
可以修改配置文件settings.py
LOG_FILE = "TencentSpider.log"
LOG_LEVEL = "INFO"