一、Scrapy框架
异步处理框架,可配置和可扩展程度非常高,Python中使用最广泛的爬虫框架
二、框架组成
1、引擎(Engine) :整个框架核心
2、调度器(Scheduler) :接受从引擎发过来的URL,入队列
3、下载器(Downloader):下载网页源码,返回给爬虫程序
4、项目管道(Item Pipeline) :数据处理
5、下载器中间件(Downloader Middlewares)
处理引擎与下载器之间的请求与响应
6、蜘蛛中间件(Spider Middlerwares)
处理爬虫程序输入响应和输出结果以及新的请求
7、Item :定义爬取结果的数据结构,爬取的数据会被赋值为Item对象
三、Scrapy框架的爬取流程
四、PyCharm创建Scrapy爬虫项目
(一)安装scrapy
pip install scrapy
(二)创建一个python项目
创建ScrapyDemo项目
(三)创建Scrapy爬虫项目
- 终端下执行
scrapy startproject 项目名
- 生成如下文件即完成
(四)Scrapy项目中创建爬虫文件
- 终端下进入Scrapy项目文件中
- 终端下运行
scrapy genspider 文件名 域名
- 查看
spiders
文件,生成文件则为成功
(五)处理数据
1.修改日志级别
为了显示简洁,将日志打印级别设置为ERROR,否则会打印很多INFO级别日志,妨碍查看
在settings.py中添加 LOG_LEVEL = 'ERROR'
2.处理请求数据
修改爬虫文件sina_news.py
# -*- coding: utf-8 -*-
import scrapy
class SinaNewsSpider(scrapy.Spider):
name = 'sina_news'
allowed_domains = ['www.sina.com.cn']
start_urls = ['http://www.sina.com.cn/']
def parse(self, response):
# 打印url
print(response.url)
# 打印标题, 使用xpath
# # extract() 返回列表 extract_first() 返回字符串
title = response.xpath('/html/head/title/text()').extract_first()
print(title)
# 打印html前100个字符
print(response.body.decode('utf-8')[:100])
(六)运行爬虫项目
1.终端运行
保证运行路径在Scrapy项目中
在终端下运行scrapy crawl 爬虫文件名
2.代码文件运行
- 在Scrapy项目下创建
run.py
文件
- 在
run.py
文件中添加
from scrapy import cmdline
if __name__ == '__main__':
cmdline.execute('scrapy crawl sina_news'.split())
- 运行
run.py
五、scrapy项目文件详解
(一)目录结构
(二)settings.py配置
# 是否遵守robots协议,该为False
ROBOTSTXT_OBEY = False
# 最大并发量,默认为16个
CONCURRENT_REQUESTS = 32
# 下载延迟时间为3秒
DOWNLOAD_DELAY = 3
# 请求报头
DEFAULT_REQUEST_HEADERS = {
'User-Agent': "Mozilla/5.0",
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
# 蜘蛛中间件
SPIDER_MIDDLEWARES = {
'testspider.middlewares.TestspiderSpiderMiddleware': 543,
}
# 下载器中间件
DOWNLOADER_MIDDLEWARES = {
'testspider.middlewares.TestspiderDownloaderMiddleware': 543,
}
# 管道文件
ITEM_PIPELINES = {
'testspider.pipelines.TestspiderPipeline': 300,
}