使用Scrapy框架爬取博客信息

news2024/11/25 16:23:47

随着网络的发展,越来越多有价值的信息存储在网络上。使用爬虫技术可以从这些信息源中提取出有用的数据。本文将介绍如何使用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 BkyItem

class 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 json

class 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.coloradmin.cn/o/2228591.html

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

相关文章

Vue2.0 通过vue-pdf-signature@4.2.7和pdfjs-dist@2.5.207实现PDF预览

1.安装依赖 npm install pdfjs-dist2.5.207 --savenpm install vue-pdf-signature4.2.7 --save2.在.vue文件中 script 部分引入 <script> import * as PDFJS from pdfjs-dist PDFJS.GlobalWorkerOptions.workerSrc require(pdfjs-dist/build/pdf.worker.js);//解决pdf…

A4-C四驱高防变电站巡检机器人

在电力行业数字化、智能化转型进程中&#xff0c;搭载多模态成像传感器的变电站巡检机器人、视频监控设备逐渐取代传统人工&#xff0c;成为变电设备状态监测的主要工具。变电站巡检机器人具有全天候、非接触式、多参量测量等特点&#xff0c;结合内置人工智能算法完成仪表识别…

““ 引用类型应用举例

#include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和resetiosflags(); //setbase( char x )是设置输出数字的基数,如输出进制数则用se…

Git 本地操作(2)

会以下操作就可以完成本地的版本控制了&#xff0c;就不需要再复制文件每次改一个东西就复制整个工程保存下来啦&#xff01; 建议先看上一篇文章噢 &#xff01;&#xff01;&#xff01; 一、新建项目git本地操作 1、初始化仓库 创建一个 project 文件夹&#xff0c;将需…

室内障碍物射线追踪算法matlab模拟仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 增加发射点 加入室内墙壁&#xff1a; 同时增加发射点和室内墙壁&#xff1a; 2.算法运行软件版本 matlab2022a 3.部分…

视频文案素材获取渠道分享

做视频时为文案发愁&#xff1f;别担心&#xff01;今天为大家推荐几个实用的视频文案素材网站&#xff0c;让你灵感爆棚&#xff0c;轻松创作文案。 蛙学网 首先要推荐的是蛙学网。作为专业短视频素材库&#xff0c;不仅有修牛蹄、解压视频等热门素材&#xff0c;还为短视频创…

【LLaMA-Factory】【Windows】:在windows操作系统配置大模型微调框架LLaMA-Factory

目录 序言 1 代码下载 2 模型下载 一、模型的作用 二、为何需要下拉模型 3 conda 环境安装 一、环境隔离与管理 二、简化安装与配置 三、提升性能与兼容性 4 安装依赖包 5 安装cuda 121版本 6 安装pytorch 一、PyTorch与LLaMA-Factory的兼容性 二、PyTorch的GPU加…

深度学习基础(2024-10-30更新到tensor相关)

1. 名词解释 FFN FFN &#xff1a; Feedforward Neural Network&#xff0c;前馈神经网络馈神经网络是一种基本的神经网络架构&#xff0c;也称为多层感知器&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;FFN 一般主要是包括多个全连接层(FC)的网络&#xff…

逆变器前级倍压方案【工作日志】

EG3525S: 价格便宜&#xff0c;能买到&#xff0c;资料丰富&#xff0c;成熟&#xff0c;有人用 C2987456_AC-DC控制器和稳压器_EG3525S_规格书_WJ93166.PDF 发现一个好玩的&#xff0c;这个芯片还可以做大功率的降压控制使用&#xff1a; EG3525S推挽半桥PWM控制芯片数…

企业数字化转型该如何衡量?转型的好不好,主要看哪些方面?

​大家发现一个现象没&#xff1f;就是明明可以简单几句话说清楚的事&#xff0c;有些人就喜欢长篇大论&#xff0c;写个几千上万字&#xff0c;甚至从概念、定义开始聊&#xff0c;讲了半天都还没讲到重点。就给人一种强行“凑字”的感觉... 其实这个问题很简单的&#xff0c;…

html生成图片方案总结

动态图片生成是我们日常开发中经常遇到的需求&#xff0c;比如宣传海报生成&#xff0c;电商商品图动态生成等&#xff0c;本文总结出三种常见的 HTML 生成图片的方案。 一、html2canvas html2canvas库能够将 HTML 元素渲染为 Canvas&#xff0c;然后将其转换为图片。它的优点…

瑞芯微RK3566/RK3568 Android11下该如何默认屏蔽导航栏/状态栏?看这篇文章就懂了

本文介绍瑞芯微RK3566/RK3568在Android11系统下&#xff0c;默认屏蔽导航栏/状态栏方法&#xff0c;使用触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566芯片&#xff0c;类树莓派设计&#xff0c;Laval官方社区主荐&#xff0c;已适配全新OpenHarmony5.0 R…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan之网页版

Shodan网页版概述 Shodan是一个专门用于搜索互联网上各种设备和服务的搜索引擎&#xff0c;它能够发现并列出暴露在互联网上的设备&#xff0c;如服务器、路由器、交换机、网络摄像头等。与传统的搜索引擎不同&#xff0c;Shodan并不为网页内容建立索引&#xff0c;而是寻找开放…

第二十一章 Vue组件通信之prop校验及单向数据流

目录 一、什么是Prop 1.1. Prop传递数据代码示例图 1.2. 演示代码App.vue 1.3. 演示代码UserInfo.vue 二、props 校验 2.1. props校验简单写法 2.1.1. 演示代码App.vue 2.1.2. 演示代码BaseProgress.vue 2.2. props校验完整写法 2.2.1. 演示代码BaseProgress.vue 2.…

哈工大《理论力学》第九版课后答案解析及笔记PDF

第九版序 哈工大《理论力学》初版于1961年&#xff0c;先后再版8次&#xff0c;曾获得首届国家优秀教材奖和国家级教学成果奖。本书第8版为“十二五”普通高等教育本科国家级规划教材&#xff0c;并于2021年被国家教材委员会评为首届全国教材建设奖全国优秀教材一等奖。 本书…

CloudSat数据产品数据下载与处理 (matlab)

CloudSat数据下载 这个数据我之前和CALIPSO弄混了&#xff0c;后来发现它们虽然是同一个火箭上去&#xff0c;但是数据产品却在不同的平台下&#xff0c;CloudSat的数据更加关注云的特性&#xff0c;包括云覆盖、云水当量、云分类数据。 数据网址在&#xff1a;CloudSat网址 …

Linux初阶——线程(Part2):互斥同步问题

一、互斥锁 1、CPU 运算过程 执行完整个语句后&#xff0c;才会把数据写入内存&#xff1b;如果执行时被中断&#xff0c;那么数据和上下文就会保存到线程的 TCB&#xff0c;但数据并不会被写入内存。 1.1. 当 CPU 执行完整个语句时 CPU 最终执行完整个语句的过程 就用上图举…

Linux学习_10

第九章Linux文件系统权限 主要包括&#xff1a;文件的一般权限&#xff0c;特殊权限&#xff0c;ACL权限&#xff0c;权限掩码umask 文件的一般权限 文件详细信息 文件权限构成 权限针对三类对象定义 owner&#xff1a;所有者&#xff0c;缩写u group &#xff1a;所属组&#…

Easysearch 与 LLM 融合打造知识库系统

文章目录 一、LangChain 简介二、RAG 产生的背景及其局限性三、RAG 工作流程四、 Easysearch 结合 LLM 实现 RAG&#xff08;1&#xff09;Easysearch 简介&#xff08;2&#xff09;结合实现RAG 五、 Easysearch 结合 LLM 实现 RAG 的优势&#xff08;1&#xff09;提高检索准…

【SSM详细教程】-16-SSM整合超详细讲解

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…