Scrapy框架
1、定义
异步处理框架,可配置和可扩展程度非常高,Python中使用最广泛的爬虫框架
2、安装(Ubuntu)
1、安装依赖库
sudo apt-get install python3-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
2、安装Scrapy
sudo pip3 install Scrapy
3、验证
>>>import scrapy
4、创建项目出现警告解决方案
1、scrary startproject AAA
"Warning : .... Cannot import OpenTpye ...."
因为 pyasn1 版本过低,将其升级即可
sudo pip3 install pyasn1 --upgrade
Scrapy框架五大组件
1、引擎(Engine) :整个框架的核心
2、调度器(Scheduler):接受从引擎发过来的URL,入队列
3、下载器(Downloader):获取网页源码,返给爬虫程序
4、下载器中间件(Downloader Middlewares)
蜘蛛中间件(Spider Middlewares)
5、项目管道(Item Pipeline) :数据处理
6、Scrapy框架详细抓取流程
7、制作Scrapy爬虫项目的步骤
1、新建项目
scrapy startproject 项目名
2、明确目标(items.py)
3、制作爬虫程序
进入到spiders文件夹中,执行:
scrapy genspider 文件名 "域名"
4、处理数据(pipelines.py)
5、配置settings.py
6、运行爬虫程序
scrapy crawl 爬虫名
8、scrapy项目结构
Baidu
├── Baidu :项目目录
│ ├── __init__.py
│ ├── items.py :定义爬取数据结构
│ ├── middlewares.py :下载器中间件和蜘蛛中间件
│ ├── pipelines.py :管道文件,处理数据
│ ├── settings.py :项目全局配置
│ └── spiders :文件夹,存放爬虫程序
│ ├── baiduspider.py :爬虫程序/spider
│ ├── __init__.py
│
└── scrapy.cfg :项目基本配置文件,不用改
9、文件配置详解
1、settings.py
USER_AGENT = 'Baidu (+http://www.yourdomain.com)'
# 是否遵循robots协议,改为False
ROBOTSTXT_OBEY = False
# 最大并发量,默认为16个
CONCURRENT_REQUESTS = 6
# 下载延迟时间
DOWNLOAD_DELAY = 1
# 请求报头
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',
}
# 下载器中间件
DOWNLOADER_MIDDLEWARES = {
'Baidu.middlewares.BaiduDownloaderMiddleware': 543,
}
# 项目管道,处理数据
ITEM_PIPELINES = {
'Baidu.pipelines.BaiduPipelineMySQL': 300,
'Baidu.pipelines.BaiduPipelineMongo': 200,
}
10、项目 :抓取百度首页源码,存到 百度.html中
1、scrapy startproject Baidu
2、cd Baidu/Baidu
3、subl items.py(此步不用操作)
4、cd spiders
5、scrapy genspider baidu "www.baidu.com"
6、subl baidu.py
# 爬虫名
# 域名 : 重点检查
# start_urls : 重点检查
def parse(self,respose):
with open("百度.html","w") as f:
f.write(response.text)
7、cd ../
8、subl settings.py
1、把robots改为False
2、添加User-Agent
DEFAULT_REQUEST_HEADERS = {
'User-Agent','Mozilla/5.0',
... ...
}
9、cd spiders 运行 scrapy crawl baidu
想要看更多的课程请微信关注SkrEric的编程课堂