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

尚硅谷爬虫note14

一、scrapy

scrapy:为爬取网站数据是,提取结构性数据而编写的应用框架

1. 安装

        pip install scrapy

或者,国内源安装

        pip install scrapy -i https://pypi.douban.com/simple

2. 报错

        报错1)building ‘twisted.test.raiser’ extension

原因:缺少twisted库

解决:下载twisted库:

        a)cp是python版本

        b)amd是操作系统版本

        安装twisted库:

        使用:pip install 拖入twisted路径

twisted库安装完成后,再安装scrapy库

        报错2)提示python -m pip install --upgrade pid

   解决:运行python -m pip install --upgrade pid

        报错3)win32错误

  解决:pip install pypiwin32

        仍然报错)

        解决:安装Aanacoda工具

二、创建scrapy项目

1)创建scrapy项目

在终端中创建项目:

        scrapy startproject 项目名

2)创建爬虫文件

       在spiders文件夹中创建爬虫文件

a)切入spiders目录下:

        cd  项目名\项目名\spiders

 b) 在spiders文件夹中创建爬虫文件

        scrapy genspider 文件名 要爬取的网页

 一般情况下,要爬取的网页之前:不需要添加http协议

        否则start-urls中的路径不成立

  原因:start_urls的值是根据allowed_domains进行修改的,如果添加了http协议,allowed_domains的值需要用户手动修改

import scrapyclass Demo001Spider(scrapy.Spider):# 爬虫的名字:用于运行爬虫时,使用的值name = "demo001"# 允许访问的域名allowed_domains = ["www.baidu.com"]# 起始url地址:指的是第一次要访问的域名# start_urls是在allowed_domains之前添加1个http://  在allowed_domains之后添加1个/start_urls = ["http://www.baidu.com"]
#执行了 start_urls之后执行的方法    方法中的response就是返回的对象 相当于1)response = urllib.requests.urlopen()    2)response = requests.get()def parse(self, response):pass

 3)运行爬虫文件

scrapy crawl 爬虫的名字

 

做了反扒————

 解决:注释掉君子协议:项目下的setting.py文件中的robots.txt协议

注释掉:ROBOTSTXT_OBEY = True

 

 三、scrapy项目结构

项目名

        项目名

                spider文件夹        (存储爬虫文件)

                        init        

                        自定义的爬虫文件        (核心功能文件)

                init

                items        (定义数据结构的地方)(爬取的数据包含哪些)

                middleware        (中间件)(代理)

                pipelines        (管道)(处理下载的数据)

                settings        (配置文件)

四、response的属性和方法

3)4)5)常用

1)response.text

        获取响应的字符串

2)response.body

        获取响应的二进制数据

3)response.xpath

        直接使用xpath方法解析response中的内容

4)response.extract()

        提取selector对象中的data属性值

5)response.extract_first()        

        提取selector对象的第一个数据

五、scrapy工作原理

1). 引擎向spiders要url

2). 引擎将要爬取的url给调度器

3). 调度器将url生成请求对象,放入指定的队列

4). 从队列中出队一个请求

5). 引擎将请求交给下载器进行处理

6).下载器发送请求,向互联网请求数据

7). 下载器将数据返回给引擎

8). 引擎将数据再次给到spiders

9).spiders通过xpath解析数据

10).  spiders将数据,或者url,给到引擎

11). 引擎判断该数据,是数据,还是url

        a)是数据,交给管道处理

        b)还是url,交给调度器处理

六、scrapy shell

        scrapy终端

测试xpath和css表达式

免去了每次修改后,运行spiders的麻烦

        使用

                终端中直接执行:

                        scrapy shell 域名

安装ipython(高亮,补全)

        pip install ipython

七、懒加载中的src

有data-original,src用data-original替代

替换前:src = // ul[ @ id = "component_59"] / li // img / @ src
替换后:src = // ul[ @ id = "component_59"] / li // img / @ data-original

当当网练习中的第一张图片是none

        原因:没有data-original

 #有data-original,src用data-original替代src = li.xpath('.//img/@data-original').extract_first()# 第一张图片和其他图片标签不一样,第一张图片的src是可以使用的   其他图片的地址是data-originalif src:src = srcelse:#用srcsrc = li.xpath('.//img/@src').extract_first()

当当网:

        items.py:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
from urllib import responseimport scrapyclass DemoDdwItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# pass#图片# src = // ul[ @ id = "component_59"] / li // img / @ srcsrc = scrapy.Field()#名字# alt = // ul[ @ id = "component_59"] / li // img / @ altname = scrapy.Field()#价格# price = //ul[@id = "component_59"]/li//p[@class = "price"]/span[1]/text()price = scrapy.Field()# src、name、price都有共同的li标签# 所有的selector对象,都可以再次调用xpath方法li_list = response.xpath('//ul[@id = "component_59"]/li')for li in li_list:#.extract()提取数据#有data-original,src用data-original替代src = li.xpath('.//img/@data-original').extract_first()# 第一张图片和其他图片标签不一样,第一张图片的src是可以使用的   其他图片的地址是data-originalif src:src = srcelse:#用srcsrc = li.xpath('.//img/@src').extract_first()alt = li.xpath('.//img/@alt').extract_first()price = li1.xpath('.//p[@class = "price"]/span[1]/text()').extract_first()print(src,name,price)

相关文章:

尚硅谷爬虫note14

一、scrapy scrapy:为爬取网站数据是,提取结构性数据而编写的应用框架 1. 安装 pip install scrapy 或者,国内源安装 pip install scrapy -i https://pypi.douban.com/simple 2. 报错 报错1)building ‘twisted.te…...

1438. 绝对差不超过限制的最长连续子数组

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题2.4 代码复盘 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 滑动窗口 2.2 代码尝试 class Solution { public:int longestSubarray(vector<int>& nums, int limit) {int cou…...

ZCC5090EA适用于TYPE-C接口,集成30V OVP功能, 最大1.5A充电电流,带NTC及使能功能,双节锂电升压充电芯片替代CS5090EA

概要&#xff1a; ZCC5090EA是一款5V输入&#xff0c;最大1.5A充电电流&#xff0c;支 持双 节 锂 电 池 串 联 应 用 的 升 压 充 电 管 理 I C 。ZCC5090EA集成功率MOS&#xff0c;采用异步开关架构&#xff0c; 使其在应用时仅需极少的外围器件&#xff0c;可有效减少整体 …...

Dify 开源大语言模型应用开发平台使用(二)

文章目录 说明Dify 使用报告1. 应用创建——专业的锂电池相关知识解答1.1 平台简介1.2 创建应用 2. 知识库、工作流、变量、节点与编排节点详解2.1 知识库管理2.2 工作流配置2.3 变量管理2.4 节点与编排节点 3. 测试和调试3.1 单元测试3.2 日志与监控3.3 实时调试3.4 性能测试 …...

【LangFuse】数据集与测试

1. 在线标注 2. 上传已有数据集 import json# 调整数据格式 {"input":{...},"expected_output":"label"} data [] with open(my_annotations.jsonl, r, encodingutf-8) as fp:for line in fp:example json.loads(line.strip())item {"i…...

【Python】如何解决Jupyter Notebook修改外部模块后必须重启内核的问题?

“为什么我修改了Python模块的代码&#xff0c;Jupyter Notebook却看不到变化&#xff1f;” 一、问题现象&#xff1a;令人抓狂的开发体验 假设你正在开发一个图像处理项目&#xff0c;项目结构如下&#xff1a; project/ ├── utils/ │ └── image_processor.py └…...

Redis 篇

一、数据结构 二、持久化方式 Redis 提供了两种主要的持久化方式&#xff0c;分别是 RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append Only File&#xff09;&#xff0c;此外&#xff0c;还可以同时使用这两种方式以增强数据安全性&#xff0c;以下为你…...

React + TypeScript 实战指南:用类型守护你的组件

TypeScript 为 React 开发带来了强大的类型安全保障&#xff0c;这里解析常见的一些TS写法&#xff1a; 一、组件基础类型 1. 函数组件定义 // 显式声明 Props 类型并标注返回值 interface WelcomeProps {name: string;age?: number; // 可选属性 }const Welcome: React.FC…...

从零开始:Linux环境下如何制作静态库与动态库

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言 动静态库是编程中两种主要的库类型&#xff0c;它们用于帮助开发者复用已有的代码&#xff0c;而不需要每次都从头开始编写。它们的主要区别在于链接和加载的时机、方式以及使用场景 库 库就是一些已经写好并且经过测试…...

【智能体Agent】ReAct智能体的实现思路和关键技术

基于ReAct&#xff08;Reasoning Acting&#xff09;框架的自主智能体 import re from typing import List, Tuplefrom langchain_community.chat_message_histories.in_memory import ChatMessageHistory from langchain_core.language_models.chat_models import BaseChatM…...

Java进阶:Zookeeper相关笔记

概要总结&#xff1a; ●Zookeeper是一个开源的分布式协调服务&#xff0c;需要下载并部署在服务器上(使用cmd启动&#xff0c;windows与linux都可用)。 ●zookeeper一般用来实现诸如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。 ●有多台服…...

QT-绘画事件

实现颜色的随时调整&#xff0c;追加橡皮擦功能 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QColor> #include <QPoint> #include <QVector> #include <QMouseEvent> #include <QPainter> #include <Q…...

鸿蒙NEXT开发-端云一体化开发

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 目录 端云一体化开发基本概念 传统架构 端云一…...

大模型——股票分析AI工具开发教程

大模型——股票分析AI工具开发教程 在本教程中,我们将利用Google Gemini 2.0 Flash模型创建一个简单但有效的股票分析器。 你是否曾被大量的股票市场数据所淹没?希望有一个私人助理来筛选噪音并为您提供清晰、可操作的见解?好吧,你可以自己构建一个,而且由于 Python 的强…...

nexus 实现https 私有镜像搭建

1、安装nexus 1.1 安装JDK17 rpm -ivh jdk-17.0.13_linux-x64_bin.rpm 1.2 下载安装包解压到指定目录 tar zxvf nexus-3.77.2-02-unix.tar.gz -C /usr/local 2、运行nexus 默认8081端口 cd /usr/local/nexus-3.77.2-02 && bin/nexus start 3、配置nexus私有docker 镜…...

颈椎X光数据集(cervical spine X-ray dataset)

颈椎X光数据集&#xff08;cervical spine X-ray dataset&#xff09; 一.颈椎X光&#xff08;1248张原始图像&#xff0c;无处理&#xff0c;jpg格式&#xff09; 二&#xff0e;颈椎X光&#xff08;1000张原始图像&#xff0c;无处理&#xff0c;jpg格式&#xff09; 此数据…...

(动态规划 完全背包 零钱兑换)leetcode 322

本题为完全背包 与01背包的区别是 物品可以任意取 而01背包只能取一次 这就导致了状态转移方程的不同 1.当放不下:的时候 转移方程是一样的 取0到i-1 物品&#xff0c;背包容量为j的最优值 else 2.放得下:就是取 0到i-1 物品,背包容量为j的最优值和 “0到i的[j-w[i]]v…...

【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…...

Pytorch的一小步,昇腾芯片的一大步

Pytorch的一小步&#xff0c;昇腾芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息&#xff1a;PyTorch最新2.1版本宣布支持华为昇腾芯片&#xff01; 1、 发生了什么事儿&#xff1f; 在2023年10月4日PyTorch 2.1版本的发布博客上&#xff0c;PyTorch介绍的beta版本…...

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…...

深度学习项目训练环境多场景落地:中小企业AI研发团队低成本GPU训练环境方案

深度学习项目训练环境多场景落地&#xff1a;中小企业AI研发团队低成本GPU训练环境方案 1. 环境准备与快速上手 对于中小企业的AI研发团队来说&#xff0c;搭建一个稳定可靠的深度学习训练环境往往是个头疼的问题。硬件成本高、环境配置复杂、依赖库冲突等问题经常让团队望而…...

Qwen3-0.6B-FP8效果展示:中英混合输入、长上下文保持、多轮记忆实测

Qwen3-0.6B-FP8效果展示&#xff1a;中英混合输入、长上下文保持、多轮记忆实测 1. 开篇&#xff1a;小模型&#xff0c;大能耐 你可能听过很多关于大语言模型的讨论&#xff0c;动辄几十亿、上百亿参数&#xff0c;部署起来对硬件要求极高。但今天我想跟你聊点不一样的——一…...

Vue 3 Fragments:打破枷锁的组件化革命

Vue 3 Fragments&#xff1a;打破枷锁的组件化革命 在前端框架的演进史上&#xff0c;每一次对底层限制的突破&#xff0c;往往都伴随着开发体验的质的飞跃。Vue 3 中引入的 Fragments&#xff08;片段&#xff09; 特性&#xff0c;正是这样一场迟来的“解绑”革命。它彻底粉碎…...

【极限压测】从99.9%全红到5%安全线!2026最新横评5款硬核降AI工具

说真的&#xff0c;作为在知乎摸爬滚打好几年的博主&#xff0c;我太理解大家临近交稿时的那种绝望了。眼看着论文初稿要交&#xff0c;结果降ai检测一出来&#xff0c;竟然是红彤彤的99%&#xff1f;&#xff01;那一刻&#xff0c;我感觉脑袋真的“嗡”的一声。好不容易熬夜码…...

Nunchaku FLUX.1-dev 结合Transformer架构:提升图像生成一致性与细节

Nunchaku FLUX.1-dev 结合Transformer架构&#xff1a;提升图像生成一致性与细节 最近在尝试各种文生图模型时&#xff0c;我发现了一个挺有意思的现象&#xff1a;很多模型在处理简单描述时表现不错&#xff0c;但一旦遇到包含多个对象、复杂关系或者长段描述的提示词&#x…...

OpenClaw会议纪要大师:Qwen3-32B实时转录飞书语音会议

OpenClaw会议纪要大师&#xff1a;Qwen3-32B实时转录飞书语音会议 1. 为什么需要自动化会议纪要 每次开完会最头疼的就是整理会议纪要。作为团队的技术负责人&#xff0c;我每周要参加至少8场跨部门会议&#xff0c;传统的手动记录方式让我苦不堪言——要么记录不全重点&…...

拆解 OA 系统:从需求梳理到核心执行,新手一看就会

你是不是觉得公司的OA系统特别难用&#xff1f;报销要填八百个字段&#xff0c;不知道哪个是必填&#xff1b;请假批完还得自己跑去找下一个人&#xff1b;找一个去年的合同&#xff0c;得翻十几层文件夹。更气人的是&#xff0c;提了意见根本没人管&#xff0c;说系统改不了。…...

OpenClaw+nanobot技能开发:从零编写自定义文件处理器

OpenClawnanobot技能开发&#xff1a;从零编写自定义文件处理器 1. 为什么需要自定义文件处理技能 上周我整理项目文档时&#xff0c;遇到了一个典型问题&#xff1a;需要将数百个Markdown文件按照"日期-标题"格式批量重命名。手动操作不仅耗时&#xff0c;还容易出…...

Django 学习日记(补充1)| 彻底吃透:自定义 JWT 认证 + 全局登录中间件

大家好&#xff0c;这是我 Django 学习日记的第三篇。上一篇我们把路由、反向解析、DRF 自动路由、媒体文件、跨域全部讲明白了。今天我们进入整个项目最核心、最安全、最关键的部分&#xff1a;用户登录认证体系&#xff08;在进入视图前的一篇补充文章&#xff09;。本文将从…...

Qwen2-VL-2B-Instruct性能优化:Web服务并发请求处理与队列管理

Qwen2-VL-2B-Instruct性能优化&#xff1a;Web服务并发请求处理与队列管理 当你的AI图片分析服务突然火了&#xff0c;用户蜂拥而至&#xff0c;同时上传几十张图片要求分析&#xff0c;会发生什么&#xff1f;最直接的结果可能就是服务器卡死&#xff0c;用户看到“服务超时”…...