使用Scrapy框架爬取博客信息

随着网络的发展,越来越多有价值的信息存储在网络上。使用爬虫技术可以从这些信息源中提取出有用的数据。本文将介绍如何使用Python中的Scrapy框架来爬取博客站点上的文章标题、作者以及阅读数,并将其保存到JSON文件中。

一、项目背景

Scrapy是一个快速高级的web爬虫框架,用于抓取网站数据,提取结构化数据。它可以处理大量的网站,提供了灵活的API来适应各种需求。本文将使用Scrapy来爬取来自Cnblogs的技术博客信息。

二、环境搭建

在开始编写爬虫之前,需要确保安装了Python环境,并且安装了Scrapy库。可以通过如下命令安装Scrapy:

pip install scrapy

创建一个新的Scrapy项目:

scrapy startproject DemoProject
cd DemoProject

在项目的spiders目录下创建一个爬虫:

scrapy genspider bkySpider cnblogs.com

三、定义Item类

首先,我们需要定义一个数据模型来存储爬取的数据。在DemoProject/DemoProject/items.py中定义如下类:

class BkyItem(scrapy.Item):title = scrapy.Field()author = scrapy.Field()readNum = scrapy.Field()

这里定义了三个字段:titleauthorreadNum,分别用于存储文章标题、作者名称和阅读数量。

四、编写爬虫逻辑

接下来,在DemoProject/spiders/bkySpider.py中编写爬虫逻辑:

import scrapy
from DemoProject.items import BkyItemclass BkyspiderSpider(scrapy.Spider):name = "bkySpider"allowed_domains = ["cnblogs.com"]start_urls = ["https://cnblogs.com"]def parse(self, response):# 创建item对象item = BkyItem()# 使用 XPath 选择器获取所有文章元素article = response.xpath("//article[@class='post-item']")item["title"] = article.xpath(".//section[@class='post-item-body']//div[@class='post-item-text']//a[@class='post-item-title']/text()").extract()item["author"] = article.xpath(".//footer[@class='post-item-foot']//a[@class='post-item-author']//span/text()").extract()item["readNum"] = article.xpath(".//footer[@class='post-item-foot']//a[contains(@title,'阅读')]//span/text()").extract()return item

这里定义了一个名为bkySpider的爬虫类,指定了起始URL,并在parse方法中解析了页面内容,提取了所需的字段。

五、实现Pipeline处理

为了处理爬取到的数据,我们还需要定义一个Pipeline。在DemoProject/DemoProject/pipelines.py中添加如下代码:

import jsonclass DemoProjectPipeline(object):def __init__(self):# 打开edu.json文件self.file = open("D:\\PyCharmProject\\pP1\\work2.json", "w", encoding='utf-8')def close_spider(self, spider):self.file.close()def process_item(self, item, spider):print("Processing an item in the pipeline...")# 通过for循环以此处理每条博文数据,从item对象中读取# 构建json格式self.file.write('[')# 开始for循环写入for index in range(0, len(item['title'])):# 逐层提取,赋值title = item['title'][index]# 注意:原始代码中缺少对href的处理,这里假设href存在href = item['href'][index]# 重构生成一条json记录,json的标准格式record = {"title": title, "href": href}# 写入到json文件里line = json.dumps(dict(record), ensure_ascii=False)self.file.write(line)# 如果不是最后一行,要加入逗号换行符if index != len(item["title"]) - 1:self.file.write(',\n')self.file.write(']')return item

注意:原始代码中并没有href字段的提取,此处假设它存在于item中,否则需要删除或调整。

六、执行爬虫

现在,可以在命令行中运行爬虫:

scrapy crawl bkySpider

执行完毕后,指定路径下的work2.json文件将包含爬取的数据。

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

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

相关文章

网络编程 UDP编程 Linux环境 C语言实现

UDP编程 1. 一般UDP编程 UDP传输特点:非面向连接、不可靠的、无序的 报式传输 支持组播和广播 UDP应用数据最大长度建议:MTU(以太网分组数据的最大长度)1500 - 20(IP头) - 8(UDP头) 1472Bytes 客户端:支持两种形式的代码编写: 1. 不定向…

使用linux+nginx 作为unity webgl的服务器

使用linuxnginx 作为unity webgl的服务器 建议使用命令行下载,使用源码编译可能编译不过。 自己创建一个uinty webgl项目,或者下载我上传的unity webgl项目 https://download.csdn.net/download/GoodCooking/24339451下载nginx 使用图形界面 下载ngi…

Flink CDC 同步 Mysql 数据

文章目录 一、Flink CDC、Flink、CDC各有啥关系1.1 概述1.2 和 jdbc Connectors 对比 二、使用2.1 Mysql 打开 bin-log 功能2.2 在 Mysql 中建库建表准备2.3 遇到的坑2.4 测试 三、番外 一、Flink CDC、Flink、CDC各有啥关系 Flink:流式计算框架,不包含 …

【模型学习之路】手写+分析bert

手写分析bert 目录 前言 架构 embeddings Bertmodel 预训练任务 MLM NSP Bert 后话 netron可视化 code2flow可视化 fine tuning 前言 Attention is all you need! 读本文前,建议至少看懂【模型学习之路】手写分析Transformer-CSDN博客。 毕竟Bert是tr…

C#实现隐藏和显示任务栏

实现步骤 为了能够控制Windows任务栏,我们需要利用Windows API提供的功能。具体来说,我们会使用到user32.dll中的两个函数:FindWindow和ShowWindow。这两个函数可以帮助我们找到任务栏窗口,并对其执行显示或隐藏的操作 引入命名空…

Excel菜单选项无法点击?两种原因及解决方法全解析

在使用Excel处理数据时,有时会遇到菜单选项无法点击的情况。这种问题会影响到正常的操作和编辑。出现这种情况的原因可能有多种,本文将介绍两种常见的原因,并提供相应的解决方法,帮助小伙伴们快速恢复菜单选项的正常使用。 原因一…

SpringBoot节奏:Web音乐网站构建手册

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

波尼音乐 2.3.0-b1 | 开源免费的音乐播放器,附两个公共接口

波尼音乐最初作为一个毕设项目,凭借其实现了本地与网络音乐播放的能力而受到许多用户的喜爱。随着百度在线音乐API的关闭,波尼音乐逐渐失去在线音乐播放功能。在开源社区的支持下,开发者发现新的网易云音乐API,重启项目并进行全面…

ComfyUI - ComfyUI 工作流中集成 SAM2 + GroundingDINO 处理图像与视频 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/143359538 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 SAM2 与…

C++原创游戏宝强越狱第二季即将回归

抱歉,3个月以来我不是没时间更,而是懒得更。。。 这不宝强越狱第一季完结了么,所以我决定两个月内弄完宝强越狱第二季,第一个版本将在2025年1月1日发布。不过,我还做了个预告片BQYY预告片-CSDN直播(33s的垃…

mysql查表相关练习

作业要求: 单表练习: 1 . 查询出部门编号为 D2019060011 的所有员工 2 . 所有财务总监的姓名、编号和部门编号。 3 . 找出奖金高于工资的员工。 4 . 找出奖金高于工资 40% 的员工。 5 找出部门编号为 D2019090011 中所有财务总监,和…

【笔试题】迈入offer的新大门

1. 笔试题1 1.1 题目链接:[NOIP2010]数字统计_牛客题霸_牛客网 1.2 题目描述 补充: 1.3 解法 1.3.1 算法思路 定义变量,L,R,count用于记数。 对规定符合区域范围内的数据进行遍历,对每个数据的每一位进行判断是否为2&#xf…

Gitee push 文件

1、背景 想将自己的plecs仿真放到git中管理,以防丢失,以防乱改之后丢失之前版本仿真。此操作说明默认用户已下载git。 2、操作步骤 2.1 开启Git Bash 在文件夹中右键,开启Git Bash。 2.2 克隆文件 在Git Bash中打git clone git地址&#…

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型

2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere:视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …

MySQL高可用MHA

目录 一、MHA概述 1.MHA是什么 2.MHA的组成 3.MHA特点 4.MHA工作原理 二、MySQL部署MHA 1.配置主从复制 2.配置MHA高可用 2.1所有服务器安装MHA依赖环境 2.2所有服务器上安装node组件 2.3在MHA manager节点上安装manager组件 2.4在所有服务器上配置无密码认证 …

聚类算法综述

摘要 聚类算法旨在根据数据中的固有模式和相似性将数据组织成组或簇。它们在当今生活中扮演着重要角色,例如在市场营销和电子商务、医疗保健、数据组织和分析以及社交媒体中。现有众多聚类算法,并且不断有新的算法被引入。每个算法都有其自身的优点和缺…

【网络监控加速设备】国产化一站式高性能数据处理平台(海光CPU+复旦微FPGA)

随着网络流量的飞速增长,数据的监控与管理需求日益加剧。针对这一痛点,一款集协议检测、数据监测、报文转发和结果展示于一体的网络监控加速设备,设备百分之百国产化也体现了完全自主可控。设备不仅具备丰富的网络监控功能,还支持…

确保企业架构与业务的一致性与合规性:数字化转型中的关键要素与战略实施

在现代企业的数字化转型过程中,确保企业架构(Enterprise Architecture, EA)与企业业务的紧密一致性与合规性至关重要。无论是在战略层面还是运营层面,EA都为企业的未来发展提供了清晰的蓝图,确保企业在应对复杂的业务环…

指数分布的原理和应用

本文介绍指数分布,及其推导原理。 Ref: 指数分布 开始之前,先看个概率密度函数的小问题: 问题描述:你于上午10点到达车站,车在10点到10:30 之间到达的时刻 X 的概率密度函数如图: 则使用分段积分&#xff0…

HTML 基础标签——链接标签 <a> 和 <iframe>

文章目录 1. `<a>` 标签属性详细说明示例2. `<iframe>` 标签属性详细说明示例注意事项总结链接标签在HTML中是实现网页导航的重要工具,允许用户从一个页面跳转到另一个页面或嵌入外部内容。主要的链接标签包括 <a> 标签和<iframe> 标签。本文将深入探…