Scrapy | 手动请求发送实现的数据爬取-段子王网站

news2024/9/23 14:29:21

文章目录

    • 概要
    • 爬取流程
    • 代码
    • 技术细节
      • format
      • %
      • 回调函数
    • 小结

概要

爬取段子王网站的标题内容

在这里插入图片描述

  • 核心
Scrapy的手动请求发送实现的数据爬取
    yield scrapy.Request(url,callback):GET
        -caL1back指宽解析函数,用于解析数据
    yield scrapy.ForRequest(url,callback,formdata):POST
    	-formdata:字典,请R参数   

爬取流程

  1. 起始网站 start_urls
  2. 新的目标页面 new_url (新生成的,手动请求发送)⭐
  3. 解析数据
  4. 爬取数据

代码

  • spider.py
import scrapy
from firstBlood.items import FirstbloodItem

class FirstSpider(scrapy.Spider):
    name = "first"
    # allowed_domains = ["www.xxx.com"]
    start_urls = ['https://duanzi.cn/jingdian/'] # 首页 没有1

    # 通用url模板
    url = 'https://duanzi.cn/jingdian/%d/' # ⭐
    page_num =2

    def parse(self, response):
        articles = response.xpath('/html/body/div[1]/div[2]/div[2]/div[2]/div[1]/div[1]/div[@class="post item"]')
        print('*'*100)

        for article in articles:
            title = article.xpath('./h2/a/text()').extract_first()
            content = article.xpath('./div[2]/text()').extract_first()

            item = FirstbloodItem()
            item['title'] = title
            item['content'] = content

            yield item  # 提交给管道

        if self.page_num < 5 :# 结束递归条件
            print(f'第{self.page_num}详情页面的数据!!!')
            new_url = format(self.url%self.page_num)  # 拼接完整url   # ⭐
            self.page_num += 1
            print(new_url)
            # 对新的页面的URL进行请求发送   (手动请求发送)
            yield scrapy.Request(url=new_url,callback=self.parse)  # 涉及回调函数 是GET请求  ⭐

技术细节

format

  1. 在 Python 中,你可以使用 str.format() 方法或者格式化字符串字面量(f-strings)来格式化字符串。
name = "Alice"
greeting = "Hello, {}".format(name)
# 使用 f-strings(Python 3.6+)
name = "Alice"
greeting = f"Hello, {name}"
"这是一个{}和{}".format(变量1, 变量2)
# 格式化列表或者元组
data = ('张三', 25)
"{name} 是 {age}".format(*data)
# 格式化嵌套
data = {'name': '张三', 'info': {'age': 25, 'gender': '男'}}
"{name} 是 {info[age]}岁,性别是{info[gender]}".format(**data)

%

在Python中,% 操作符用于字符串格式化,它是一种传统的格式化方法,允许你将变量插入到字符串中

name = "Alice"
greeting = "Hello, %s" % name
print(greeting)  # 输出: Hello, Alice
# 使用字典进行格式化
person = {"name": "Bob", "age": 30}
print "%(name)s is %(age)d years old." % person
# 输出: Bob is 30 years old.

回调函数

在编程中,回调函数是一个通过函数名作为参数传递给其他函数的函数,然后在某个时间点被调用。
在Scrapy框架中,回调函数用于处理响应数据。每当Scrapy接收到一个响应(Response),它就会调用一个特定的函数来处理这个响应,这个函数就是回调函数。

yield scrapy.Request(url=new_url,callback=self.parse)  # 涉及回调函数callback=self.parse 是GET请求

小结

  • 为什么start_urls列表中的urL会被自动进行get请求的发送?
def start_requests(self):
    for u in self.start_urls:
        yield scrapy.Request(urlmu,callback=self.parse)

源码 :
在这里插入图片描述
在这里插入图片描述

  • 如何将start_urls中的urL默认进行post请求的发送?
-重写start_requests方法即可
def start_requests(self):
    for u in self.start_urls:
        yield scrapy.FormRequest(url=u,callback=self.parse,form_data=form_data)

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

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

相关文章

科普课堂走起 | 什么是网络安全和数据安全?

网络安全和数据安全是现代数字世界中非常重要的两个概念。让我们来详细了解一下这两个领域。 1.网络安全&#xff08;Network Security&#xff09; 网络安全是指保护网络系统免受未经授权的访问、攻击、破坏或滥用的一系列技术和过程。它旨在确保信息的机密性、完整性和可用…

jmeter-beanshell学习16-自定义函数

之前写了一个从文件获取指定数据&#xff0c;用的时候发现不太好用&#xff0c;写了一大段&#xff0c;只能取出一个数&#xff0c;再想取另一个数&#xff0c;再粘一大段。太不好看了&#xff0c;就想到了函数。查了一下确实可以写。 public int test(a,b){return ab; } ctes…

磁盘无法访问的危机与解救:数之寻软件的数据恢复之旅

在数字时代&#xff0c;磁盘作为数据存储的核心&#xff0c;承载着我们的工作文档、珍贵照片、个人视频等无价之宝。然而&#xff0c;当您试图访问某个磁盘时&#xff0c;却遭遇了“磁盘无法访问”的提示&#xff0c;这无疑是一场突如其来的数据危机。本文将深入探讨磁盘无法访…

浮毛季到了,拒绝猫咪变成“蒲公英”,宠物空气净化器去除浮毛

同为铲屎官&#xff0c;面对家中无处不在的猫毛挑战&#xff0c;想必你也深感头疼。衣物、沙发乃至地毯上的明显猫毛尚可通过吸尘器或粘毛器轻松应对&#xff0c;但那些细微漂浮的毛发却成了难以捉摸的“小恶魔”&#xff0c;普通的空气净化器往往力不从心。对于浮毛&#xff0…

平安城市行业无人机解决方案(网格化巡逻场景应用)

场景痛点&#xff1a; 缺少飞手&#xff0c;导致无人机应用频次偏低 无人机需要人工换电池、维护及存储 日常巡逻 | 无人机补盲巡逻 大疆航点飞行功能&#xff0c;重复性任务只飞一遍&#xff0c;后续重复调用 无人机航点规划&#xff0c;一次设置&#xff0c;后续重复调用…

Linux知识复习第3期

目录 网络管理 &#xff08;1&#xff09;查看IP信息&#xff1a; &#xff08;2&#xff09;配置临时生效的网络连接 &#xff08;3&#xff09;修改配置文件配置网络连接&#xff08;network服务&#xff09; &#xff08;4&#xff09;shell脚本批量IP设置 网络…

HarmonyOS Flex布局

前置知识&#xff1a; 一次开发&#xff0c;多端部署:一套代码工程&#xff0c;一次开发上架&#xff0c;多端按需部署。支撑开发者快速高效的开发支持多种终端设备形态的应用&#xff0c;实现对不同设备兼容的同时&#xff0c;提供跨设备的流转、迁移和协同的分布式体验自适应…

Protobuf:原理、用法与 C++ 实践

在当今的软件开发领域&#xff0c;高效的数据序列化和通信协议是构建高性能、可扩展系统的关键。Protobuf&#xff08;Protocol Buffers&#xff09;作为一种流行的开源序列化框架&#xff0c;正因其出色的性能、简洁的语法和跨语言支持而备受青睐。本文将深入探讨 Protobuf 的…

织梦cms站长导航网站源码

介绍&#xff1a; 源码仅供技术参考严禁商业用途&#xff01;版权归原作者所有&#xff01; 源码上传 到服务器 导航源码安装&#xff1a;域名/install/ 后台信息 后台地址&#xff1a;域名/dede 后台账号&#xff1a;admin 后台密码&#xff1a;7206876 代码下载&#x…

【代码随想录】区间和——前缀和方法

本博文为《代码随想录》学习笔记&#xff0c;原文链接&#xff1a;代码随想录 题目 原题链接&#xff1a;58. 区间和&#xff08;第九期模拟笔试&#xff09; 题目描述 给定一个整数数组 Array&#xff0c;请计算该数组在每个指定区间内元素的总和。 输入描述 第一行输入为…

求职 day13总结

总结一下周一的平安寿险电话面&#xff08;7月29&#xff09;和周二&#xff08;7月30&#xff09;华为od的技术一面、二面、&#xff08;8月1&#xff09;资面和等结果流程。 面试前压力挺大的&#xff0c;毕竟这么久还没有技术面过。周日还想再推一下od技术面时间&#xff0…

【C语言】数据结构前言

&#x1f984;个人主页:小米里的大麦-CSDN博客 &#x1f38f;所属专栏:C语言数据结构_小米里的大麦的博客-CSDN博客 &#x1f381;代码托管:黄灿灿/数据结构 (gitee.com) ⚙️操作环境:Visual Studio 2022 目录 C语言数据结构前言 1. 什么是数据结构&#xff1f; 2. 什么是算…

矩阵的导数运算

1. 标量方程对向量的导数 一维方程f(y)求极值即求导,令 二维方程f(y1,y2)求极值即求偏导,令 如果一个标量方程f(y1,y2,...ym)有m个自变量,求取它的极值就需要求取m组的方程组。当然可以用一种简洁的方式来表达它,比如二维方程f(y1,y2)可以把其中的变量写成向量的形式,此…

sed 命令与正则表达式

sed 是非交互式的编辑器。它不会修改文件&#xff0c;除非使用 shell 重定向来保存结果。默认情况下&#xff0c;所有的输出行都会被打印到屏幕上。 sed 编辑器逐行处理文件&#xff08;或输入&#xff09;&#xff0c;并将结果打印到屏幕上。 具体过程如下&#xff1a;首先 …

Llama 3.1论文中文对照翻译

The Llama 3 Herd of Models 模型群 Llama 3 Llama Team, Al Meta 1 {}^{1} 1 Llama 团队&#xff0c;Meta Al 1 {}^{1} 1 1 {}^{1} 1 A detailed contributor list can be found in the appendix of this paper. 1 {}^{1} 1 详细的贡献者名单可在本文附录中找到。 Mod…

计算机的错误计算(五十七)

摘要 展示 函数的错误计算。 由计算机的错误计算&#xff08;五十五&#xff09;知&#xff0c;国际IEEE 754 标准给出的 函数的定义域是. 那么&#xff0c;在这个实数域范围内&#xff0c;软件的实现效果怎样&#xff1f; 例1. 已知 在数学软件 Maple 中计算 在Maple …

【ML】Auto-encoder

【ML】Auto-encoder 1. Auto-encoder自编码器的基本结构自编码器的特点自编码器的应用场景总结 2. Discrete Representation3. Anomaly Detection3.1 异常检测的特点3.2 常见的异常检测方法3.3 应用场景3.4 总结 1. Auto-encoder 自编码器&#xff08;Auto-encoder&#xff0…

大模型时代的机遇与挑战

从技术突破到技术社会的融合发展 沈向洋 通用人工智能时代&#xff0c;我们应该怎样思考大模型&#xff1f; 思考 1 算力是门槛 算力成长&#xff08;来自EPOCH AI&#xff09; GPT4 2x1025 GPU算力增长 影响算力的两大要素&#xff1a;模型大小&#xff08;参数量N&#x…

cesium自定图弹框

token记得换成您自己的&#xff01;&#xff01;&#xff01; 申请cesium的token 官网【Cesium: The Platform for 3D Geospatial】 pickEllipsoid在加载地形的情况下有一定误差&#xff0c;地形凹凸程度越大&#xff0c;误差越大。 pickPosition在depthTestAgainstTerrain…

★ C++进阶篇 ★ 继承

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第一章----继承 ~ 目录 一 继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1 定义格式 1.2.2 继承⽗类成员访问⽅式的变化 1.3 继承类模板 二 父类和子类对象赋值兼容转换…