爬虫——scrapy框架
今日内容
scrapy 架构
# 通用的网络爬虫框架,爬虫界的django
5大组件
-引擎(EGINE):大总管,负责控制数据的流向
-调度器(SCHEDULER):由它来决定下一个要抓取的网址是什么,去重
-下载器(DOWLOADER):用于下载网页内容, 并将网页内容返回给EGINE,下载器是建立在twisted这个高效的异步模型上的
-爬虫(SPIDERS):开发人员自定义的类,用来解析responses,并且提取items,或者发送新的请求request
-项目管道(ITEM PIPLINES):在items被提取后负责处理它们,主要包括清理、验证、持久化(比如存到数据库)等操作
2大中间件
-爬虫中间件:位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入和输出(用的很少)
-下载中间件:引擎和下载器之间,加代理,加头,集成selenium
scrapy安装(windows,mac,linux)
pip3 install scrapy
windows 如果装不上
pip3 install wheel # 安装后,便支持通过wheel文件安装软件
wheel文件官网:https://www.lfd.uci.edu/~gohlke/pythonlibs
pip3 install lxml
pip3 install pyopenssl
下载并安装pywin32:
pip安装 https://sourceforge.net/projects/pywin32/files/pywin32/
下载twisted的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
执行pip3 install 下载目录\Twisted-17.9.0-cp36-cp36m-win_amd64.whl
pip3 install scrapy
scrapy 命令 :和 pip 放在一起 ,功能不同
如果还装不上,试一下 python2 的 pip 命令
scrapy 创建项目,创建爬虫,运行爬虫
创建项目
scrapy startproject 项目名
创建爬虫
scrapy genspider 爬虫名 爬虫地址
scrapy genspider chouti dig.chouti.com
在spider文件夹下创建出一个py文件
运行爬虫
scrapy crawl chouti # 带运行日志
scrapy crawl chouti --nolog # 不带日志
支持右键执行爬虫
在项目路径下新建一个main.py
from scrapy.cmdline import execute
execute(['scrapy','crawl','chouti','--nolog'])
目录介绍
firstscrapy # 项目名字
firstscrapy
-spiders # 爬虫脚本
-baidu.py
-chouti.py
-middlewares.py # 中间件
-pipelines.py # 持久化数据
-main.py # 自己加的,执行爬虫
-items.py # 一些类,规定一些字段
-settings.py # 配置文件
scrapy.cfg # 上线相关
settings介绍
1 默认情况,scrapy会去遵循爬虫协议
修改配置文件参数,强行爬取,不遵循协议
ROBOTSTXT_OBEY = False
2 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
3 LOG_LEVEL='ERROR'
scrapy的数据解析(重点)
#xpath:
-response.xpath('//a[contains(@class,"link-title")]/text()').extract() # 取文本
-response.xpath('//a[contains(@class,"link-title")]/@href').extract() #取属性
#css
-response.css('.link-title::text').extract() # 取文本
-response.css('.link-title::attr(href)').extract_first() # 取属性
scrapy的持久化存储(重点)
方案一:parser函数必须返回 列表套字典的形式
scrapy crawl chouti -o chouti.csv
方案二:高级,pipline item存储(mysql,redis,文件)
在Items.py中写一个类
在spinder中导入,实例化,把数据放进去
item['title']=title
item['url']=url
item['photo_url']=photo_url
yield item
在setting中配置(数字越小,级别越高)
ITEM_PIPELINES = {
'firstscrapy.pipelines.ChoutiFilePipeline': 300,
}
在pipelines.py中写ChoutiFilePipeline
open_spider(开始的时候)
close_spider(结束的时候)
process_item(在这持久化)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现