python爬虫学习-------scrapy的第一部分(二十九天)

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

hello,兄弟姐妹们!我是喔的嘛呀。今天我们来学习scrapy的第一部分。(总共分为三部分)

目录

一、安装 Scrapy:

二、创建 Scrapy 项目:

三、创建spider

四、Selectors:

CSS 选择器

XPath 选择器

选择器的选择

五、**Items:


一、安装 Scrapy

安装 Scrapy 非常简单,只需在命令行中运行以下命令:


pip install scrapy

这将使用 pip 工具从 Python 包索引(PyPI)安装最新版本的 Scrapy。安装完成后,我们就可以开始使用 Scrapy 构建和运行网络爬虫了。(在pycharm中点击Terminal打开终端命令窗口然后输入上面的命令)

二、创建 Scrapy 项目

要创建一个新的 Scrapy 项目,我们要在终端命令行中运行以下命令:

scrapy startproject project_name

创建成功后在就能看到图片左边的scrapy项目的结构

项目结构

  • Scrapy项目通常包含多个模块和文件,如spiders(用于编写爬虫逻辑)、items.py(定义要抓取的数据结构)、middlewares.py(中间件,用于处理请求和响应)、pipelines.py(数据管道,用于处理抓取到的数据)等。

三、创建spider

  1. 进入项目目录

    使用cd命令进入我们刚创建的项目目录的spiders目录。

    
    cd (你自己的目录)
    
  2. 生成Spider

    使用scrapy genspider命令来生成一个新的Spider。我们需要提供Spider的名称和你想要爬取的网站的域名。

    scrapy genspider myspider example.com
    

    在这个例子中,myspider是Spider的名称,example.com是我们想要爬取的网站的域名。这个命令将在spiders目录下生成一个名为myspider.py的文件。

  3. 编辑Spider

    打开spiders/myspider.py文件,并编辑Spider类。我们需要至少定义start_urlsparse方法。

    import scrapy  class MySpider(scrapy.Spider):  name = 'myspider'  # Spider的名称  allowed_domains = ['example.com']  # 允许爬取的域名列表  start_urls = ['<http://example.com/>']  # 初始爬取的URL列表  def parse(self, response):  # 在这里编写你的爬取逻辑  # 使用选择器提取数据  # 生成新的请求或者返回提取的数据  pas
    
  4. 编写爬取逻辑

    parse方法中,使用Scrapy的选择器(如CSS或XPath选择器)来提取页面中的数据。你也可以生成新的请求来跟进页面中的链接。

    def parse(self, response):  # 使用CSS选择器提取标题  for title in response.css('h1.title::text').getall():  yield {'title': title}  # 跟进页面中的链接  for next_page in response.css('a.next-page::attr(href)').getall():  next_page_url = response.urljoin(next_page)  yield scrapy.Request(next_page_url, self.parse)
  5. 运行Spider

    在项目的根目录下,使用scrapy crawl命令来运行我们的Spider。

    
    scrapy crawl myspider
    

    Scrapy将开始执行你的Spider,发送请求,接收响应,并调用你在Spider中定义的回调函数来处理数据。

  6. 查看输出

    默认情况下,Scrapy会将提取的数据输出到控制台。我们也可以配置Scrapy将数据导出到文件(如JSON、CSV)或数据库。

    四、Selectors:

    Scrapy 使用了类似于 CSS 和 XPath 的选择器来从 HTML 或 XML 文档中提取数据。这些选择器提供了非常强大且灵活的方式来定位和提取页面中的特定元素。以下是关于这两种选择器的简要说明:

    CSS 选择器

    CSS 选择器是基于层叠样式表(CSS)的选择器语法。它们通常用于选择 HTML 文档中的元素,并为这些元素应用样式。在 Scrapy 中,你也可以使用 CSS 选择器来提取数据。

    CSS 选择器的一些基本示例:

    • div:选择所有的 <div> 元素。
    • .class:选择所有带有指定类的元素。
    • #id:选择具有指定 ID 的元素。
    • div p:选择所有 <div> 元素内部的 <p> 元素。
    • div > p:选择所有直接子元素为 <p> 的 <div> 元素。

    在 Scrapy 中使用 CSS 选择器提取数据的示例:

    response.css('div.class_name::text').get()  # 提取带有特定类的 div 元素中的文本内
    

    XPath 选择器

    XPath 是一种在 XML 文档中查找信息的语言,它可以用来在 XML 文档中对元素和属性进行遍历。由于 HTML 可以被视为一种特殊的 XML(尽管它的语法更加宽松),因此 XPath 也可以用于从 HTML 中提取数据。

    XPath 选择器的一些基本示例:

    • /:从文档的根节点选择。
    • element:选择名为 element 的所有元素。
    • element[@attribute='value']:选择带有指定属性和值的元素。
    • parent/child:选择 parent 元素下的所有 child 元素。
    • element/..:选择 element 的父元素。

    在 Scrapy 中使用 XPath 选择器提取数据的示例:

    response.xpath('//div[@class="class_name"]/text()').get()  # 提取带有特定类的 div 元素中的文本内容
    

    选择器的选择

    选择使用 CSS 选择器还是 XPath 选择器主要取决于你的个人偏好和具体需求。CSS 选择器通常更简洁、易读,特别是对于前端开发者来说,因为它们与 CSS 样式定义中的选择器语法相同。而 XPath 选择器则提供了更强大和灵活的功能,特别是在处理复杂的 HTML 结构时。

    在 Scrapy 中,你可以混合使用这两种选择器,根据你的需求选择最适合的方法。在实际应用中,你可能需要查看目标网页的 HTML 结构,以确定使用哪种选择器更为方便和高效。

五、Items:

Items是Scrapy用来收集爬取数据的容器,它们定义数据结构,使得爬取到的数据可以方便地存储和导出。**

Scrapy中的Items是用于收集爬取数据的容器。它们为爬取到的数据提供了一个结构化的定义,使得数据可以更加清晰地组织和存储,并方便地导出到不同的格式或数据库。

在Scrapy项目中,通常会定义一个或多个Item类,每个类代表一个数据模型,用于描述爬取的数据结构。这些Item类继承自scrapy.Item,并通过定义类属性来指定数据的字段。

以下是一个简单的Item定义的例子:

import scrapy  class MyItem(scrapy.Item):  # 定义数据字段  title = scrapy.Field()  link = scrapy.Field()  description = scrapy.Field()  price = scrapy.Field()  last_updated = scrapy.Field()

在这个例子中,MyItem类定义了五个字段:titlelinkdescriptionpricelast_updated。每个字段都是scrapy.Field的实例,表示该字段可以存储任何类型的数据。

在Spider中,当解析页面并提取出数据后,可以创建一个Item实例,并给它的字段赋值。然后,这个Item实例可以通过Scrapy的Pipeline系统进行进一步的处理,比如清洗数据、验证数据的有效性,或者将数据保存到数据库或文件中。

下面是一个在Spider中使用Item的例子:

def parse(self, response):  for product in response.css('div.product'):  item = MyItem()  # 创建Item实例  item['title'] = product.css('h2.title::text').get()  item['link'] = product.css('a.link::attr(href)').get()  item['description'] = product.css('p.description::text').get()  item['price'] = product.css('span.price::text').get()  item['last_updated'] = response.headers.get('Last-Modified')  yield item  # 提交Item到Scrapy引擎

在这个parse方法中,对于每个产品,我们创建一个MyItem实例,并使用CSS选择器提取数据并赋值给Item的字段。最后,我们使用yield关键字将这个Item实例提交给Scrapy引擎,Scrapy引擎会将其传递给后续的Pipeline进行处理。

通过定义和使用Items,Scrapy项目能够以一种结构化和清晰的方式组织和处理爬取到的数据,使得数据的存储和导出变得更加方便。

好了,兄弟姐妹们!今天的学习就到这里了。我们下一天再见啦。拜拜喽

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做App小程序h5的软件 校园小程序有哪些小程序源码平台 微信小程序里发表的展示圈子 怎么将小程序分享到朋友圈小程序社区 小程序在大学校

最近几年&#xff0c;校园外卖跑腿服务市场迅速兴起。由于学生每天课程繁忙&#xff0c;很多人没有时间去食堂或外面的餐厅用餐&#xff0c;校园外卖跑腿平台提供了便捷和快速的解决方案&#xff0c;满足了学生的饮食跑腿需求&#xff0c;并受到越来越多学生的喜爱。 那么&…

C语言程序设计(二)

1、算法、数据结构、程序 为解决一个问题而采取的方法和步骤&#xff0c;就称为“算法”。 2、算法的5大特征 3、判断n是否为素数&#xff1a;只需要从2循环到根号n。 优化原理&#xff1a;素数是因子为1和本身&#xff0c; 如果num不是素数&#xff0c;则还有其他因子&…

stm32单片机开发三、DMA

DMA其实就是一种将ADC的数据寄存器、串口的数据寄存器等等一些数据放到sram中特定位置&#xff0c;方便CPU去读取 比如ADC转换&#xff0c;DMA直接转换的ADC的值放在内存中的特定位置&#xff0c;CPU可以直接去读取 uint16_t AD_Value[4]; //定义用于存放AD转换结果的全局…

上市企业数字赋能指数数据集-2001到2022年(TF-IDF)

01、数据简介 上市公司数字赋能指数是一个用来衡量上市公司利用数字技术提高业务能力和效率的指标。这个指数反映了上市公司利用大数据、云计算和人工智能等数字技术&#xff0c;高效地利用商业资源和信息&#xff0c;并扩展供应关系的能力。市公司数字赋能指数是一种综合性的…

怎么给字符串字段加索引?

怎么给字符串字段加索引&#xff1f; 现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引&#xff0c;是我们今天要讨论的问题。 假设&#xff0c;你现在维护一个支持邮箱登录的系统&#xff0c;用户表是这么定义的&#xff1a; …

美富特 | 邀您参加2024全国水科技大会暨技术装备成果展览会

王涛 四川美源环能科技有限公司 技术总监 报告题目&#xff1a;绿色智慧水岛如何助力工业园区污水及再生水资源化利用降碳增效 拥有十余年的环保行业从业经验&#xff0c;对各类前沿物化、生化及膜技术均有丰富的研发、设计及应用经验&#xff0c;先后参与多项重点核心技术…

日本宇宙航空研究“Int-Ball2”自由飞行相机机器人采用的Epson IMU

IMU有助于飞行的稳定控制和电池充电的自动对接- 精工爱普生公司&#xff08;TSE:6724&#xff0c;“Epson”&#xff09;很高兴地宣布&#xff0c;日本宇宙航空研究开发机构&#xff08;JAXA&#xff09;选择了爱普生M-G370系列的惯性测量单元&#xff08;IMU&#xff09;&…

开源相机管理库Aravis例程学习(五)——camera-api

开源相机管理库Aravis例程学习&#xff08;五&#xff09;——camera-api 简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL 简介 本文针对官方例程中的&#xff1a;03-camera-api…

Swift - 可选项(Optional)

文章目录 Swift - 可选项&#xff08;Optional&#xff09;1. 可选项&#xff08;Optional&#xff09;2. 强制解包&#xff08;Forced Unwrapping&#xff09;3. 判断可选项是否包含值4. 可选项绑定&#xff08;Optional Binding&#xff09;5. 等价写法6. while循环中使用可选…

【论文阅读】互连网络的负载平衡路由算法 (CQR, Channel Queue Routing 通道队列路由)

Channel Queue Routing (CQR) 通道队列路由 1. Channel Queue Routing (CQR) 的动机 (1) 排队论(queueing theory)模型(2) GAL’s latency on tornado traffic(3) Routing tornado traffic with CQR 2. Channel Queue Routing 通道队列路由3. CQR 的性能4. 总结 Channel Queu…

白话机器学习1:分类问题中的评价指标

机器学习中的评价指标非常多&#xff0c;它们用来衡量模型的性能和预测能力。不同类型的机器学习任务可能需要不同的评价指标。以下是一些常见的评价指标&#xff0c;按照不同类型的机器学习任务分类&#xff1a; 对于分类问题&#xff1a; 准确率&#xff08;Accuracy&#…

[NeurIPS-23] GOHA: Generalizable One-shot 3D Neural Head Avatar

[pdf | proj | code] 本文提出一种基于单图的可驱动虚拟人像重建框架。基于3DMM给粗重建、驱动结果&#xff0c;基于神经辐射场给细粒度平滑结果。 方法 给定源图片I_s和目标图片I_t&#xff0c;希望生成图片I_o具有源图片ID和目标图片表情位姿。本文提出三个分支&#xff1a;…

pytorch中创建maskrcnn模型

0.模型输入/输出参数参见 链接: pytorch的mask-rcnn的模型参数解释 核心代码 GeneralizedRCNN(这里以mask-rcnn来解释说明) # 通过输入图像获取fpn特征图,注意这里的backbone不是直接的resnet,而是fpn化后的 features self.backbone(images.tensors) # 由于是mask-rcnn,故而…

SpringCloud系列(10)--Eureka集群原理及搭建

前言&#xff1a;当注册中心只有一个&#xff0c;而且当这个注册中心宕机了&#xff0c;就会导致整个服务环境不可用&#xff0c;所以我们需要搭建Eureka注册中心集群来实现负载均衡故障容错 Eureka架构原理图 1、Eureka集群原理 2、创建Eureka Server端服务注册中心模块 (1)在…

R语言使用sjPlot包优雅绘制回归模型的交互效应图

交互作用效应(p for Interaction)在SCI文章中可以算是一个必杀技&#xff0c;几乎在高分的SCI中必出现&#xff0c;因为把人群分为亚组后再进行统计可以增强文章结果的可靠性&#xff0c;进行可视化后可以清晰的表明变量之间的关系。不仅如此&#xff0c;交互作用还可以使用来进…

Dockerfile实战(SSH、Systemctl、Nginx、Tomcat)

目录 一、构建SSH镜像 1.1 dockerfile文件内容 1.2 生成镜像 1.3 启动容器并修改root密码 二、构建Systemctl镜像 2.1 编辑dockerfile文件 ​编辑2.2 生成镜像 2.3 启动容器&#xff0c;并挂载宿主机目录挂载到容器中&#xff0c;然后进行初始化 2.4 进入容器验证 三、…

照片误删怎么办?华为手机删除的照片如何恢复?

我们在使用华为手机时&#xff0c;可能会因为各种原因不小心删除一些照片。如果这些照片对我们来说很重要&#xff0c;那么恢复它们是非常必要且急迫的。那么华为手机删除的照片如何恢复呢&#xff1f;本文将为您介绍3种恢复华为手机中误删照片的方法。 如何恢复华为手机中被删…

Codeforces Round 941 (Div. 2)(A-D)

A. Card Exchange&#xff08;思维 Problem - A - Codeforces 题目大意&#xff1a; 给定n张牌&#xff0c;每次选k张相同的牌&#xff0c;把他们变成k-1张任意的牌&#xff0c;求最后手中最少能有几张牌。 思路&#xff1a; 直接判断这n张牌当中有没有k张一样的牌&#xff0c…

【java9】java9新特性之接口的私有方法

在Java 9中&#xff0c;接口可以包含私有方法&#xff08;包括静态私有方法和实例私有方法&#xff09;。这允许接口的设计者创建一些辅助方法&#xff0c;这些方法只能被接口中的其他方法所使用&#xff0c;而不能被实现该接口的类直接访问。 Java7 Java7及之前 &#xff0c…

软件项目管理的主要内容是什么?

目录 一、项目需求分析 二、项目计划制定 三、资源分配与调度 四、进度监控与控制 五、质量管理与保障 六、风险管理与应对 七、沟通协调与团队管理 八、项目收尾与总结 九、其他 一、项目需求分析 项目需求分析是软件项目管理的起始点&#xff0c;它涉及与客户的深入沟…