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.mfbz.cn/a/573533.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【stomp实战】搭建一套websocket推送平台

前面几个小节我们已经学习了stomp协议&#xff0c;了解了stomp客户端的用法&#xff0c;并且搭建了一个小的后台demo&#xff0c;前端页面通过html页面与后端服务建立WebSocket连接。发送消息给后端服务。后端服务将消息内容原样送回。通过这个demo我们学习了前端stomp客户端的…

BBEdit for Mac v15.0.3激活版 支持多种类型的代码编辑器

BBEdit包含了很多一流的功能&#xff0c;包括GREP图样匹配&#xff0c;搜索和替换多个文件&#xff08;即使未开启的远程服务器上的文件&#xff09;&#xff0c;项目定义的工具&#xff0c;功能导航和众多的源代码语言的语法着色&#xff0c;代码折叠&#xff0c;FTP和SFTP打开…

视频质量度量VQM算法详细介绍

视频质量评价 视频质量评价(Video Quality Assessment,VQA)是指通过主观、客观的方式对视频图像的内容、画质等,进行感知、衡量与评价。 ITU definations subjective assessment: the determination of the quality or impairment of programme-like pictures presented…

后端程序员利用 AI 给网站制作专业 favicon

看看你的 Chrome 浏览器顶部的标签页&#xff0c;每个标签页前面有一个小小的图标&#xff0c;这个就是 favicon&#xff0c;如果你将网页保存到收藏夹&#xff0c;前面也会是这个小图标。这个图标有时候就是网站的 Logo&#xff0c;有时候也不太一样。 上面截图中&#xff0c…

C++学习随笔(10)——string

本章我们来了解一下string类。 目录 1. string类是什么&#xff1f; 1.1 C语言中的字符串 1.2 string类本质 2. 标准库中的string类 2.1 string类 2.2 string类的常用接口说明 1. string类对象的常见构造 2. string类对象的容量操作 3. string类对象的访问及遍历操作…

static和extern关键字详解

目录 创作不易&#xff0c;如对您有帮助&#xff0c;还望一键三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 回顾 1.作用域和声明周期 1.1作用域 1.2生命周期 2.static和extern 2.1extern 2.2static 2.2-1static修饰局部变量 2.2-2static修饰全局变量 创…

vue flvjs 播放视频

写在前面&#xff1a; 之前使用过vodiejs插件播放过mp4视频格式的视频&#xff1b; 此次需要使用flvjs插件播放rtsp视频格式的视频&#xff1b; 因为视频的数据格式不同&#xff0c;所以对应的插件不同。 思维导图&#xff1a; 参考链接&#xff1a;rtmp、rtsp、flv、m3u8、 …

手把手教会你做属于自己的网站《保姆级教程》

手把手教会你做属于自己的网站《保姆级教程》 前言开始教程特别说明下期内容预报 前言 什么是个人网站&#xff1f; 个人网站是指因特网上一块固定的面向全世界发布消息的地方&#xff0c;通常由域名&#xff08;也就是网站地址&#xff09;、程序和网站空间构成&#xff0c;并…

麒麟 Kylin V10 一键安装 Oracle 11GR2 单机 ASM(231017)

前言 Oracle 一键安装脚本&#xff0c;演示麒麟 Kylin V10 一键安装 Oracle 11GR2 单机 ASM&#xff08;231017&#xff09;过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&a…

(八)小案例银行家应用程序-排序-数组排序

排序一直有很多的算法&#xff0c;今天我们仅仅来说JavaScript内置的排序方法 ● 字符串 const owners [Jonas, Zach, Adam, Martha]; console.log(owners.sort()); console.log(owners);但是注意&#xff0c;这个方法会改变原有的数组&#xff1b; ● 我们在试试数字 cons…

用java实现PDF的下载

1.下载PDF模版 2.导入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.2.5</version><type>pom</type></dependency> 3.完整代码 package com.by.controller…

JAVASE8中基本数据类型

本篇文章基于有过一部分的C语言基础的&#xff0c;还望大家理解 在进入到学习之前我们必须要清楚的是在JAVASE中数据类型与C语言中的数据类型基本上是相同的,接下来我们先来对8中数据类型进行简要介绍&#xff0c;他们分别是&#xff1a; 如果大家之前了解过C语言那么对于基本数…

常见的工业路由器访问问题

A&#xff1a;工业路由器已经设置了pptp怎么访问路由下面的电脑 1. 确认PPTP VPN设置&#xff1a;首先&#xff0c;确保PPTP VPN服务器在工业路由器上已正确设置&#xff0c;并且处于活动状态。这包括确保VPN服务器的IP地址、端口、用户名和密码等设置正确无误。 2. 连接到VP…

Apple公司面试题之Apple-Orange

1. 引言 你幻想过在Apple公司工作吗&#xff1f; 如果心动过&#xff0c;那这个逻辑推理面试题就是给你准备的&#xff01;这是一道有趣的面试题&#xff0c;如下所示&#xff1a; 看到这里的同学&#xff0c;我建议你暂停文章&#xff0c;拿起笔和纸&#xff0c;试一试。准…

KBL410-ASEMI新能源专用整流桥KBL410

编辑&#xff1a;ll KBL410-ASEMI新能源专用整流桥KBL410 型号&#xff1a;KBL410 品牌&#xff1a;ASEMI 封装&#xff1a;KBL-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;4A 功率(Pd)&#xff1a;小功率 芯片个数&#xff1a;4…

Linux实现文件共享

#nfs-utils、rpcbind 软件包来提供 NFS 共享服务 #客户端创建共享文件夹&#xff1a; nmcli c reload nmcli c up ens160 systemctl stop firewalld systemctl disable firewalld rpm -q nfs-utils rpcbind #查看是否安装 systemctl enable rpcbind systemctl enable nfs…

Skill Check: Fundamentals of Large Language Models

Skill Check: Fundamentals of Large Language Models 完结&#xff01;

CUDA的开发框架

CUDA的开发框架主要提供了一系列工具和库&#xff0c;使得开发者可以充分利用NVIDIA GPU进行高效的并行计算。以下是CUDA开发框架的一些关键组成部分。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.CUDA核心库&#xff1a;这些是构…

带你走进不一样的策略模式

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 带你走进不一样的策略模式 前言策略模式简介概念解释 策略模式的结构策略模式优点项目实践之bean策略构思业务策略实现策略接口实现策略上下文业务实现 前言 在编程的世界里&#xff0c;每一次按键都…

【办公类-26-02】20240423 UIBOT学分自动评价(自动登录、评价和退出,全自动)

背景需求&#xff1a; 我想用UIBOT自动模拟鼠标&#xff0c;登录每位老师的账户&#xff0c;进入评价区域&#xff0c;自动选择7次“满意”&#xff0c;输入1次“无”&#xff0c;然后提交。 C Dim objExcelWorkBook,arrayRet,iRet,temp,iPID,hWeb,dictRet,XobjExcelWorkBook …
最新文章