scrapy快速上手

安装

        除了scrapy本身还要安装两个库 

pip install scrapy
pip install pywin32
pip install wheel

 创建项目

在要创建项目的地方打开powershell

scrapy startproject 项目名

我们得到这样的项目结构,功能如下 

  1.         scrapy.cfg                项目的主配置信息
  2.         items.py                   设置项目模板,用于结构化数据
  3.         piplines.py                数据的持久化处理
  4.         seting                        配置文件
  5.         spiders                       爬虫文件目录

配置信息

seeting.py下修改是否支持数据爬取修改为允许,true不允许,false允许

  

 将这一行的内容改为false

配置浏览器请求头中的user-agent

根据网站反爬措施制定其他的配置 

配置模板

        items.py中照着给出的格式配置自己的数据模板

        变量名 = scrapy.Field()

创建爬虫文件

指定爬取目标

 回到powershell,

cd 项目名
scrapy genspider 爬虫文件名 爬取目标网址

得到这样一个文件

import scrapyclass QuotesSpider(scrapy.Spider):# 爬虫名name = "quotes"allowed_domains = ["quotes.toscrape.com"]# 爬取目标start_urls = ["https://quotes.toscrape.com/"]# 爬取动作def parse(self, response):

寻找元素和内容

在parse方法中定义爬取动作 ,参数列表中的response是爬取目标的响应对象。

具有如下属性

  1. url:响应的 URL 地址。
  2. status:HTTP 状态码,如 200 表示成功,404 表示未找到等。
  3. headers:响应的 HTTP 头部信息,是一个类似字典的对象。
  4. body:响应体,即服务器返回的内容,是一个字节串(bytes)。
  5. text:响应体的字符串形式,如果响应的 Content-Type 是文本类型(如 HTML),则可以直接使用此属性获取内容。
  6. encoding:响应的编码方式,用于将 body 转换为 text
  7. meta:传递给响应的元数据信息,常用于在请求和响应之间传递数据。
  8. request:触发此响应的请求(Request)对象。

具有如下方法

  1. xpath():用xpass寻找元素
  2. css():用css寻找元素
  3. urljoin():构造网址
  4. get() 和 getall(): 这两个方法用于从SelectorSelectorList对象中提取数据。get()方法返回第一个匹配节点的文本或属性值(如果指定了属性),而getall()方法返回所有匹配节点的文本或属性值列表。
  5. extract() 和 extract_first(): 这两个方法是旧版本Scrapy中用于提取数据的方法,但在新版本中,推荐使用get()getall()方法。extract()方法返回所有匹配节点的文本列表,而extract_first()方法返回第一个匹配节点的文本。
  6. re(regex, replace_entities=True) 和 re_first(regex, default=None, replace_entities=True): 这两个方法允许你使用正则表达式来提取匹配的数据。re()方法返回所有匹配的字符串列表,而re_first()方法返回第一个匹配的字符串。
  7. attrib: 这是一个属性字典,用于访问当前节点的属性。如果当前对象是SelectorList,则attrib将返回列表中第一个元素的属性字典。

        使用xpath和css方法寻找元素的时候如果返回多个值的时候添加.extract()返回的是str类型列表,单个值则为.extract_first(),返回的是str类型


text = q.xpath(".//span[@class='text']/text()").extract_first()
author = q.xpath('.//span/small[@class="author"]/text()').extract_first()   
tags = q.xpath('.//div[@class="tags"]/a[@class="tag"]').extract()

        这样找到的元素可以直接被bs4解析并获取值。

将结果组成模板

        首先导入item,并在要组成模板的位置实例化一个ScrapydemoItem对象

from scrapydemo.items import ScrapydemoItemitem = ScrapydemoItem()#在你要组成模板的位置写

         为实例属性赋值

item["text"] = text
item["author"] = author
item["tags"] = tags

        结束爬虫        yield类似return,但是可以循环返回

yield item

         每返回一个item会写入一条数据

        当然也可以不返回item,获取到下一个页面的url即可继续访问下一个页面

        # 获取访问下一页地址next = response.css('.pager .next .a::attr(href)').extract_first()  # 两个冒号获取属性值# 合成绝对路径url = response.urljoin(next)# 访问请求的回调函数# 第三个参数是关闭地址过滤yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)

         这样就可以调用自己继续访问下一页了

创建启动项

创建main.py 

from scrapy import cmdlinecmdline.execute("scrapy crawl quotes -o quotes.json".split())
#                scrapy crawl 爬虫名  -o代表文件流  创建quotes.json这个文件

        也可以在cmd或powershell中输入字符串中的值 

爬取scrapy官方靶站的示例代码:

import scrapyfrom scrapydemo.items import ScrapydemoItemclass QuotesSpider(scrapy.Spider):# 爬虫名name = "quotes"allowed_domains = ["quotes.toscrape.com"]# 爬取目标start_urls = ["https://quotes.toscrape.com/"]# 爬取动作def parse(self, response):# 获取页面中的元素返回列表quote = response.xpath('//div[@class="quote"]')# 遍历列表每个元素for q in quote:text = q.xpath(".//span[@class='text']/text()").extract_first()    # 获取内容author = q.xpath('.//span/small[@class="author"]/text()').extract_first()    # 获取作者tags = q.xpath('.//div[@class="tags"]/a[@class="tag"]').extract()    # 获取标签# 实例化item = ScrapydemoItem()# 为实例属性赋值item["text"] = textitem["author"] = authoritem["tags"] = tags# 返回数据,相当于return,但是可以循环返回。yield item# 获取访问下一页地址next = response.css('.pager .next .a::attr(href)').extract_first()  # 两个冒号获取属性值# 合成绝对路径url = response.urljoin(next)# 访问请求的回调函数# 第三个参数是关闭地址过滤yield scrapy.Request(url=url,callback=self.parse,dont_filter=True)

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

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

相关文章

LeetCode[中等] 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 思路 回溯法 log:当前结果数组;level&#xff1a…

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)

梁哲,同济大学长聘特聘教授,国家杰青、首届国家杰青延续项目获得者、上海市曙光学者、上海市优秀学术带头人。本科毕业于新加坡国立大计算机工程系、硕士毕业于新加坡国立大学工业与系统工程系、博士毕业于美国新泽西州立大学工业工程系。理论研究主要集…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间,你可以按照如下步骤修改SessionAge 这个参数: 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错,则执行步骤4;如果没有报错则执行第5步如果第2步…

探索光耦:光耦在电脑电源中的应用及其重要性

随着计算机技术的飞速发展,电脑已成为现代生活和工作中不可或缺的工具。无论是日常办公、游戏娱乐还是复杂的图像处理,电脑电源的稳定性和安全性都至关重要。作为电脑电源的核心部件之一,光耦(光电耦合器)在提升电源性…

JavaScript网页设计案例:互动式简历网站

JavaScript网页设计案例:互动式简历网站 在现代网页设计中,JavaScript 是实现交互和动态效果的关键技术。本文将通过一个完整的案例,展示如何使用 JavaScript 构建一个交互式的个人简历网页。本文不仅会涵盖 HTML 和 CSS 的使用,…

android和ios双端应用性能的测试工具

1.工具介绍 基于日常工作的需要,开发了一款新的android和ios端应用性能测试工具,本工具在数据测试方面与所流行的工具没有区别。欢迎下载使用体验。 本工具为筋斗云,工具说明 本工具无侵入,不需要root,低延迟…

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功,可以在浏览器访问3.2、如果没有跳转,需要单独安装 kubernetes-dashboard3.2.1、方式一:一步到位3.2.2、方式二:逐步进行 1、Enab…

如何恢复被删除的 GitLab 项目?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

time命令:轻松测量Linux命令执行时间!

一、命令简介 用途: 用于测量 Linux 命令执行的时间,包括实际时间、用户 CPU 时间和系统 CPU 时间。刚开始以为是用来“看现在几点钟”的 🥲。标签: 实用工具,性能分析。 ‍ 二、命令参数 2.1 命令格式 time [选项…

进程的那些事--实现shell

目录 前言 一、预备知识 二、实现步骤 1.思路 2.实现 总结 前言 提示:这里可以添加本文要记录的大概内容: 学习的本质就是变现 提示:以下是本篇文章正文内容,下面案例可供参考 一、预备知识 char * fgets ( char * str, i…

讯飞星火编排创建智能体学习(二)决策节点

目录 概述 决策节点 文生图节点 连接节点 测试结果 概述 在上一篇博文讯飞星火编排创建智能体学习(一)最简单的智能体构建-CSDN博客,我介绍了编排创作智能体,这篇来介绍一下“决策节点”。 决策节点 在编排创作智能体中&…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

(代码完美实现)stm32 新版 onenet mqtt物联网(保姆级教程) (代码完美实现)stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…

巧用switch-case消除条件判断

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 在之前的文章中,我们有提交消除if-else代码的方法: 结合HashMap与Java 8的Function和Optional消除ifelse判断巧用枚举消除逻辑判…

一文上手SpringSecuirty【六】

自定义认证流程完成之后,前端收到了后端生成的token,那么在之后的所有请求当前,都必须携带token.作为服务器来说,得验证这个token,是否合法. 一、验证token是否合法 1.1 OncePerRequestFilter过滤器 OncePerRequestFilter是 Spring 框架中的一个过滤器,用于确保在…

抖音支付回调验签 go 版本

序言 最近在做抖音小程序支付,由于抖音开放平台的文档写的较为简陋,让人踩了不少坑,在这里整理一下做小程序支付的整个过程,以通用交易系统为例子。 准备条件 1)申请小程序,开通支付功能 这里需要明确你小…

鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务

使用场景 Sensor Service Kit(传感器服务)使应用程序能够从传感器获取原始数据,并提供振感控制能力。 Sensor(传感器)模块是应用访问底层硬件传感器的一种设备抽象概念。开发者可根据传感器提供的相关接口订阅传感器…

Mitsuba 渲染基础

Mitsuba 渲染基础 0. Abstract1. 安装 Mitsuba21.1 下载 Mitsuba2 源码1.2 选择后端 (variants)1.3 编译 2. [Mitsuba2PointCloudRenderer](https://github.com/tolgabirdal/Mitsuba2PointCloudRenderer)2.1 Mitsuba2 渲染 XML2.2 Scene 场景的 XML 文件格式2.2.1 chair.npy to…

Comfyui 学习笔记2

在潜空间放大,三种方法:NNLatentUpscale、Upscale Latent、Upscale Latent,其中只有NNLatentUpscale自带模型优化,其他两种需要KSample重新绘画,NNLatentUpscale后也可以接KSmaple。 像素空间放大,同理&am…

大模型推理任务Nvidia GPU选型指南

大型语言模型 (LLM)(如 GPT-4、BERT 和其他基于 Transformer 的模型)彻底改变了 AI 格局。这些模型需要大量计算资源来进行训练和推理。选择合适的 GPU 进行 LLM 推理可以极大地影响性能、成本效益和可扩展性。 在本文中,我们将探索最适合 L…

Spring的热部署工具和数据库密码加盐操作

1.布置热部署 引言:在程序运行起来后,如果我们对代码进行了修改,需要重新测试修改后的程序,就得重新启动程序,这样很麻烦。于是引入热部署之后,我们就不需要重新启动程序,会自动更正。 1.配置po…