当前位置: 首页 > news >正文

Scrapy爬虫异步框架(一篇文章齐全)

1、Scrapy框架初识

2、Scrapy框架持久化存储(点击前往查阅)

3、Scrapy框架内置管道(点击前往查阅)

4、Scrapy框架中间件(点击前往查阅)

Scrapy 是一个开源的、基于Python的爬虫框架,它提供了强大而灵活的工具,用于快速、高效地提取信息。Scrapy包含了自动处理请求、处理Cookies、自动跟踪链接、下载中间件等功能。

Scrapy框架的架构图(先学会再来看,就能看懂了!)

一、安装

在Pycharm终端中使用以下命令安装 Scrapy:

pip install scrapy

 

二、创建 Scrapy 项目

在Pycharm终端中使用以下命令创建一个 Scrapy 项目:

scrapy startproject project_name

其中 project_name 是你文件夹的名字文件名只能以字母开头,只能包含数字、字母、下划线),下面是创建好的目录结构(.venv 这个文件无视,这个是我配置的虚拟环境,这个地方不做多讲解,想了解点击这:虚拟环境讲解)。

三、创建爬虫项目

在Pycharm终端中使用以下命令创建一个 Scrapy 项目:

scrapy genspider spider_name example.com

命令讲解:

  •  spider_name:是你的爬虫文件名(名字不能和scrapy项目重复
  • example.com:初始设置的网址(这个随便填写,等下可以改的,可以设置www.xxx.com)

注意:需要先进入你创建的Scrapy项目中,例如:我这个文件名是:CSDN

对比下绿色横线的文件目录就发现不一样了。

⬇️⬇️⬇️执行的命令演示⬇️⬇️⬇️

3.1:创建好的目录结构

 

 四、编写爬虫

4.1:setting设置

设置 setting 中需要改动的地方(这个是基本的设置,其他的根据需要来开启)

4.2:代码初识

打开创建好的爬虫文件(baidu.py)进入编写我们的程序:

初始的是这样的

代码的含义:          

4.3:数据解析(parse函数)

演示网站:(不可干预人家网站的正常运行!!!家常菜做法大全有图_家常菜菜谱大全做法_好吃的家常菜_下厨房【下厨房】家常菜栏目为您提供最新的家常菜做法大全、家常菜菜谱大全和步骤,让你也可以轻松做出好吃的家常菜icon-default.png?t=N7T8https://www.xiachufang.com/category/40076/

需求:第一页的所有的菜名和作者

最终代码:

import scrapyclass BaiduSpider(scrapy.Spider):# 爬虫文件的唯一标识(就是你创建的爬虫文件夹名字)name = "baidu"# 允许的域名,这个代表你只能访问这个网址的子域名,其他的都会禁止(这个我们会注释掉,不会打开)# allowed_domains = ["www.xxx.com"]# 起始的url列表,网址可以随便放,可以放多个,列表中的url都会被框架进行异步请求发送。start_urls = ["https://www.xiachufang.com/category/40076/"]# 数据解析:parse调用的次数取决于start_urls列表元素的个数def parse(self, response):  # response参数就表示响应对象# 利用xpath解析:(scrapy内置xpath,无需另外导入)li_list = response.xpath('//div[@class="pure-u-3-4 category-recipe-list"]//ul/li')for li in li_list:# 1、scrapy中的xpath会返回Selector对象,我们需要的数据在该对象data属性中(extract可以实现该功能,)# 2、extract_first()就是取第一个,因为文本两边有空格,所以.strip() 可以去除两侧的空格title = li.xpath('.//p[1]/a/text()').extract_first().strip()author = li.xpath('.//p[4]/a/text()').extract_first().strip()print(title, author)

输出结果:

五、运行爬虫

使用以下命令运行你的 Scrapy 爬虫:

scrapy crawl myspider

命令讲解

  • myspider:你的爬虫文件名字(例如我的是:baidu)

相关文章:

  • 插入排序(形象类比)
  • ubuntu修改系统语言
  • Windows系统管理之备份与恢复
  • PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables
  • Hibernate 脏检查和刷新缓存机制
  • 【开源】基于Vue.js的天然气工程运维系统的设计和实现
  • EMG肌肉信号处理合集 (一)
  • 【DP】mobiusp正在创作乐曲
  • ubuntu20.04配置OpenCV的C++环境
  • 深度学习之基于YoloV3杂草识别系统
  • GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件
  • 操作系统 应用题 例题+参考答案(考研真题)
  • 【Ambari】HDFS基于Ambari的常规运维
  • 基于C#实现赫夫曼树
  • ②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
  • hexo+github搭建个人博客
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [译]如何构建服务器端web组件,为何要构建?
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • ES学习笔记(12)--Symbol
  • HTTP--网络协议分层,http历史(二)
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • js
  • js正则,这点儿就够用了
  • laravel5.5 视图共享数据
  • leetcode-27. Remove Element
  • MySQL的数据类型
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Python连接Oracle
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React-生命周期杂记
  • Wamp集成环境 添加PHP的新版本
  • Windows Containers 大冒险: 容器网络
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 浮现式设计
  • 工作中总结前端开发流程--vue项目
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 听说你叫Java(二)–Servlet请求
  • 运行时添加log4j2的appender
  • 找一份好的前端工作,起点很重要
  • - 转 Ext2.0 form使用实例
  • 《天龙八部3D》Unity技术方案揭秘
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​iOS实时查看App运行日志
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #{} 和 ${}区别
  • #AngularJS#$sce.trustAsResourceUrl
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (阿里云万网)-域名注册购买实名流程
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot宠物管理系统 毕业设计 121654