5 scrapy
1 scrapy介绍和安装创建项目
# Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据
# 模块---》scrapy是一个框架--》类似于web框架django
# scrapy就是爬虫界的django
# twisted是一个流行的事件驱动的python网络框架,异步非阻塞
# 分层---》分模块--》分组件
#### 5大组件
# 引擎(EGINE)---》大总管
引擎负责控制系统所有组件之间的数据流,并在某些动作发生时触发事件。有关详细信息,请参见上面的数据流部分。
# 调度器(SCHEDULER)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
# 下载器(DOWLOADER)
用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
# 爬虫(SPIDERS)---》我们写代码的地方
SPIDERS是开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求
# 项目管道(ITEM PIPLINES)
在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
### 两大中间件
# 下载器中间件(Downloader Middlewares)---》用的多--》设置请求头,设置cookie,设置代理
位于Scrapy引擎和下载器之间,主要用来处理从EGINE传到DOWLOADER的请求request,已经从DOWNLOADER传到EGINE的响应response,你可用该中间件做以下几件事
# 爬虫中间件(Spider Middlewares)
位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入(即responses)和输出(即requests)
# 安装
# linux/mac
pip3 install scrapy
# win 如果装不上
1、pip3 install wheel #安装后,便支持通过wheel文件安装软件,wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
3、pip3 install lxml
4、pip3 install pyopenssl
5、下载并安装pywin32:https://sourceforge.net/projects/pywin32/files/pywin32/
6、下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
7、执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
8、pip3 install scrapy
# 创建scrapy项目--》框架--》django创建项目类似
scrapy startproject crawl_cnblogs
# 创建爬虫爬取cnblogs--》django创建app
scrapy genspider cnblogs www.cnblogs.com
# 注意:pycharm直接支持创建django项目---》使用django-admin命令创建项目--》使用pycharm打开
2 目录介绍
crawl_cnblogs # 项目名字
-crawl_cnblogs # 目录
-__init__.py
-spiders # 爬虫文件夹,内部放了很多爬虫
-__init__.py
-cnblogs.py # 爬虫文件
-chouti.py # 爬虫文件
-items.py # 模型类--》类似于django的models
-middlewares.py # 爬虫中间件和下载中间件
-pipelines.py # 持久化的位置(文件,mysql)
-settings.py # 整个项目配置文件
-scrapy.cfg # 项目上线相关
3 爬虫启动和解析数据
# 启动爬虫--》一个个启动
scrapy crawl 爬虫名字
scrapy crawl cnblogs
scrapy crawl cnblogs --nolog # 不打印日志
# 创建一个py文件,使用py文件启动 run.py
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'cnblogs','--nolog'])
# 以后右键运行,就可以运行爬虫
## 数据解析
-数据解析
-xpath
-拿文本:'.//a/text()'
-拿属性:'.//a/@href'
-css
-拿文本:'a.link-title::text'
-拿属性:'img.image-scale::attr(src)'
-取一条;extract_first()
-取多条:extract()
## 继续爬取下一页
## 存储数据
## 详情看代码
4 爬虫中间件和下载中间件
# 下载中间件---》用的多
# 1 修改请求头
# 2 加cookie
# 3 加代理
class CrawlCnblogsDownloaderMiddleware:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)