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

探索CSDN博客数据:使用Python爬虫技术

探索CSDN博客数据:使用Python爬虫技术

在数字化的浪潮中,数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台,汇聚了海量的技术博客与文章,成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和pyquery库之间,探索如何撷取CSDN博客的点滴信息,并进行初步的数据处理。

前提声明

  • 爬虫应遵守目标网站的robots.txt协议,尊重版权和用户隐私。
  • 本代码仅供学习和研究使用,不得用于商业用途。
  • 请确保在合法合规的前提下使用本代码。
  • 本代码所爬取的数据为公开可选择的博客信息。

目录

  1. 引言
  2. 环境准备
  3. 爬虫代码解析
  4. 代码解释
  5. 效果展示
  6. 注意事项
  7. 结语
  8. 全部代码

引言

在数字化时代,数据的获取和分析变得越来越重要。作为一名程序员或数据分析师,我们经常需要从各种在线平台抓取数据以进行进一步的分析或学习。CSDN作为中国最大的IT社区和服务平台,拥有大量的技术博客和文章,是一个丰富的数据源。本文将介绍如何使用Python的requests和pyquery库来爬取CSDN博客的信息,并进行简单的数据处理。

环境准备

在开始之前,确保你的环境中已经安装了Python,并且安装了以下库:

  • requests:用于发送网络请求。
  • pyquery:一个解析HTML的库,类似于jQuery。

可以通过pip安装这些库:

pip install requests pyquery

爬虫代码解析

import requests
from pyquery import PyQuery as pq# 用户输入CSDN账号
account = input('请输入CSDN ID:')# 构建基本的URL
baseUrl = f'http://blog.csdn.net/{account}' 
myUrl = f'{baseUrl}/article/list/1'# 设置请求头,模拟浏览器访问
headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
}# 发送请求并获取页面内容
myPage = requests.get(myUrl, headers=headers).text
doc = pq(myPage)# 打印博客的一些基本信息
data_info = doc("aside .data-info dl").items()
for i, item in enumerate(data_info):if i == 0:print("原创:" + item.attr("title"))if i == 1:print("粉丝:" + item.attr("title"))if i == 2:print("喜欢:" + item.attr("title"))if i == 3:print("评论:" + item.attr("title"))# 爬取文章列表
page_num = 1
while True:myUrl = f'{baseUrl}/article/list/{page_num}'myPage = requests.get(myUrl, headers=headers).textif len(myPage) < 30000:breakprint(f'-----------------------------第 {page_num} 页---------------------------------')doc = pq(myPage)articles = doc(".article-list > div").items()for i, item in enumerate(articles):if i == 0:continuetitle = item("h4 > a").text()[2:]date = item("p > .date").text()num_item = item("p > .read-num").items()article_info = [date, title]for j, jitem in enumerate(num_item):if j == 0:article_info.append(jitem.text())else:article_info.append(jitem.text())print(" ".join(article_info))page_num += 1

代码解释

  1. 用户输入
    脚本首先提示用户输入CSDN的ID,这个ID用于构建访问CSDN博客的URL。

  2. 请求头设置
    为了模拟浏览器访问,脚本设置了请求头。这是为了避免被网站的反爬虫机制识别,因为很多网站会检查请求头中的User-Agent来确定访问者是否为真实用户。

  3. 获取页面内容
    使用requests库发送HTTP请求,获取博客页面的HTML内容。这是爬虫的基础步骤,通过发送请求并接收响应来获取网页数据。

  4. 解析HTML
    使用pyquery库解析HTML内容,提取所需的信息。pyquery类似于jQuery,可以方便地选择HTML元素并提取数据。在这个脚本中,它被用来提取博客的原创、粉丝、喜欢和评论数量等信息。

  5. 爬取文章列表
    通过循环,脚本爬取每一页的文章列表,包括文章的标题、发布日期、阅读量和评论数。这是通过构造不同的URL(根据页码)并重复发送请求来实现的。每次循环都会检查响应内容的长度,如果内容过短,则认为已经到达最后一页,循环结束。

效果展示
image.png

注意事项

  • 遵守爬虫规范:在进行数据爬取时,应该尊重网站的robots.txt文件,这是网站所有者设定的爬虫访问规则。合理设置爬取频率,避免在短时间内发送大量请求,以免给网站服务器带来不必要的压力和负担。同时,也要注意不要爬取那些被明确禁止爬取的内容。

  • 数据使用:获取的数据应仅用于个人学习或研究,不得用于商业用途。在使用爬取的数据时,应遵守数据的版权和知识产权规定,尊重数据的原创性和所有权。如果数据中包含个人信息,还应遵守相关的隐私保护法规,不得泄露或滥用这些信息。

  • 法律风险:在爬取数据前,确保你的行为不违反相关法律法规。不同国家和地区对于数据爬取有不同的法律规定,因此在进行爬取活动前,应充分了解并遵守当地的法律法规。避免侵犯版权、商标权、专利权等知识产权,以及违反个人隐私保护法规。

  • 技术道德:在技术实践中,应遵循技术道德,尊重他人的劳动成果。在爬取和使用数据时,应考虑到数据来源网站的利益,避免对网站的正常运营造成影响。同时,也应考虑到其他用户的利益,避免因个人行为而损害社区的整体利益。

  • 透明度和责任:在使用爬虫技术时,应保持透明度,对自己的行为负责。如果爬取的数据将被公开或用于研究,应明确数据来源,并在可能的情况下,征得数据所有者的同意。在发现数据中的错误或不准确信息时,应及时更正,并对自己的行为承担相应的责任。

  • 持续学习:技术环境和法律法规都在不断变化,因此,作为技术人员,应持续学习最新的技术发展和法律动态,以确保自己的行为始终符合最新的标准和要求。

结语
本文介绍了如何使用Python的requests和pyquery库来爬取CSDN博客的数据,并进行简单的数据处理。CSDN作为中国最大的IT社区和服务平台,拥有大量的技术博客和文章,是一个丰富的数据源。通过这个简单的爬虫脚本,用户可以轻松地获取CSDN博客的数据,进行进一步的分析或学习。

首先,文章强调了爬虫应遵守目标网站的robots.txt协议,尊重版权和用户隐私,并确保在合法合规的前提下使用代码。接着,介绍了环境准备,包括安装Python和必要的库。然后,文章通过详细的代码解析,展示了如何构建URL、设置请求头、发送请求、解析HTML以及爬取文章列表的过程。

代码首先提示用户输入CSDN的ID,以便构建访问的URL。然后,设置请求头模拟浏览器访问,使用requests库发送HTTP请求获取博客页面的HTML内容。利用pyquery库解析HTML,提取博客的原创、粉丝、喜欢和评论数量等信息。通过循环,爬取每一页的文章列表,包括文章的标题、发布日期、阅读量和评论数。

文章还提供了效果展示,通过截图展示了爬虫脚本的运行结果。同时,强调了在爬取数据时应当遵守的规范和法律风险,提醒用户获取的数据应仅用于个人学习或研究,不得用于商业用途。

最后,文章总结了通过这个爬虫脚本,用户可以提升自己的数据处理能力,并在实际工作中应用所学知识。同时,鼓励读者探索技术的无限可能,并在遇到问题时联系作者寻求帮助。

整体而言,这篇文章不仅提供了一个实用的爬虫工具,还强调了在爬取数据时应当遵守的规范和法律风险,对于希望学习网络爬虫技术的读者来说,是一篇很好的入门教程。

在数字化时代,数据的获取和分析变得越来越重要。CSDN作为中国最大的IT社区和服务平台,拥有大量的技术博客和文章,是一个丰富的数据源。本文介绍了如何使用Python的requests和pyquery库来爬取CSDN博客的信息,并进行简单的数据处理。通过这个简单的爬虫脚本,你可以轻松地获取CSDN博客的数据,进行进一步的分析或学习。这不仅是一次编程实践,更是对网络请求、HTML解析和数据处理的深入理解。希望读者能够将所学应用到更多有趣和有益的项目中去,并在实践中不断提升自己的编程能力。如果有任何问题或需要进一步的帮助,请随时联系作者。让我们一起探索技术的无限可能!

全部代码

# 例如输入:lwcwamimport requests
from pyquery import PyQuery as pq# 当前的博客列表页号
page_num = 1account = str(input('print csdn id:'))
#account = "lwcwam"
# 首页地址
baseUrl = 'http://blog.csdn.net/' + account
# 连接页号,组成爬取的页面网址
myUrl = baseUrl + '/article/list/' + str(page_num)headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
# 构造请求# 访问页面
myPage = requests.get(myUrl,headers=headers).textdoc = pq(myPage)data_info = doc("aside .data-info dl").items()
for i,item in enumerate(data_info):if i==0:print("原创:"+item.attr("title"))if i==1:print("粉丝:"+item.attr("title"))if i==2:print("喜欢:"+item.attr("title"))if i==3:print("评论:"+item.attr("title"))grade_box = doc(".grade-box dl").items()
for i,item in enumerate(grade_box):if i==0:childitem = item("dd > a")print("等级:"+childitem.attr("title")[0:2])if i==1:childitem = item("dd")print("访问:"+childitem.attr("title"))if i==2:childitem = item("dd")print("积分:"+childitem.attr("title"))if i==3:print("排名:"+item.attr("title"))# 获取每一页的信息
while True:# 首页地址baseUrl = 'http://blog.csdn.net/' + account# 连接页号,组成爬取的页面网址myUrl = baseUrl + '/article/list/' + str(page_num)# 构造请求myPage = requests.get(myUrl,headers=headers).textif len(myPage) < 30000:breakprint('-----------------------------第 %d 页---------------------------------' % (page_num,))doc = pq(myPage)articles = doc(".article-list > div").items()articleList = []for i,item in enumerate(articles):if i == 0:continuetitle = item("h4 > a").text()[2:]date = item("p > .date").text()num_item = item("p > .read-num").items()ariticle = [date, title]for j,jitem in enumerate(num_item):if j == 0:read_num = jitem.text()ariticle.append(read_num)else:comment_num = jitem.text()ariticle.append(comment_num)articleList.append(ariticle)for item in articleList:if(len(item)==4):print("%s %s %s %s"%(item[0],item[1],item[2],item[3]))page_num = page_num + 1

相关文章:

探索CSDN博客数据:使用Python爬虫技术

探索CSDN博客数据&#xff1a;使用Python爬虫技术 在数字化的浪潮中&#xff0c;数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台&#xff0c;汇聚了海量的技术博客与文章&#xff0c;成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和py…...

b站ip属地评论和主页不一样怎么回事

在浏览B站时&#xff0c;细心的用户可能会发现一个有趣的现象&#xff1a;某些用户的评论IP属地与主页显示的IP属地并不一致。这种差异引发了用户的好奇和猜测&#xff0c;究竟是什么原因导致了这种情况的发生呢&#xff1f;本文将对此进行深入解析&#xff0c;帮助大家揭开这一…...

如何查看服务器内存占用情况?

如何查看服务器的内存占用情况&#xff1f;你知道内存使用情况对服务器性能的重要性吗&#xff1f;内存是服务器运行的核心资源之一&#xff0c;了解内存的占用情况可以帮助你优化系统性能。 要查看服务器的内存占用情况&#xff0c;首先需要确定你使用的是哪种操作系统。不同…...

流架构的读书笔记(2)

流架构的读书笔记&#xff08;2&#xff09; 一、建模工具之一沃德利地图 推测技术的发展,交流和辩论思想的最有力的方法是沃德利地图 沃德利地图的制作步骤 1确定范围和用户需求 2确定满足用户需求所需的组件 3在一条范围从全新到被人们接受的演进轴上评估这些组成 部分的演…...

E6 中的 扩展运算符(Spread) 和 剩余运算符(Rest)

时间&#xff1a;2024.12.29 之前看到 Es6 中的 三点运算符&#xff0c;有如下的几种写法&#xff0c;有时候三点运算符放在左边&#xff0c;有时候三点运算符放在右边&#xff0c;老是混淆。今天记录下&#xff0c;加强理解。 先看一个问题 最近在看 《ECMAScript 6 入门》关于…...

Python的简单爬虫框架

爬虫为网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、…...

使用 uni-app 开发的微信小程序中,如何在从 B 页面回来时,重新拉取数据?

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…...

Windows API Set:那些“只存在但不被使用“的DLL

API Set 是什么&#xff1f; 想象一下&#xff0c;Windows就像一个大型图书馆&#xff0c;而API Set就是这个图书馆的索引系统。但这个索引系统非常特别&#xff1a;它是直接内置在Windows加载器中的"虚拟目录"。 // 一个典型的API Set映射示例 api-ms-win-core-mem…...

黑神话悟空鼠标光标分享

效果图&#xff1a; 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话&#xff1a;悟空》游戏中的角色和元素&#xff0c;具有以下特点&#xff1a; • 主题鲜明&#xff1a;光标设计紧扣游戏主题&#xff0c;采用了游戏中的元素&#xff0c;让玩家在使用电脑时也能感受到…...

编写一个简单的引导加载程序(bootloader)

编写一个简单的引导加载程序&#xff08;bootloader&#xff09;通常用于嵌入式系统或自定义操作系统。这里&#xff0c;我将为你提供一个基于x86架构的简单汇编语言 bootloader 示例。这个 bootloader 将会在启动时打印一条消息到屏幕上。 使用 NASM 汇编器来编写这个 bootlo…...

【Linux基础】进程(上) —— 概念、状态、优先级与环境变量

目录 一、进程的概念 1. 什么是进程 PCB进程控制块的理解 2. 查看进程的方式 ps ajx 指令 getpid系统调用 3. 另外一种查看进程的方式(了解) 4. 进程的常见调用 fork 创建子进程 现象说明 二、进程的状态 1. 操作系统层面的进程状态 ① 运行状态 ② 阻塞状态 ③…...

Rust: enum 和 i32 的区别和互换

在Rust编程语言中&#xff0c;enum&#xff08;枚举&#xff09;和i32是两种不同类型的数据结构&#xff0c;它们各自有不同的用途和特性。 i32 i32是一个32位的有符号整数类型。它用于存储整数值&#xff0c;范围从-2,147,483,648到2,147,483,647。i32是Rust中的基本数据类型…...

2024年终回顾

前言 很久没有更新博客&#xff0c;因为工作内容主要是内场开发&#xff0c;后来有点和互联网脱轨&#xff0c;断断续续上来看一下。这个总结应该也很简单&#xff0c;涉及以下的几个内容进行逐一说明 一、就业问题 这个问题可能很尖锐&#xff0c;从大环境来说&#xff0c;去…...

RGB、HSV颜色模型及MATLAB互换应用实例

一、前言 RGB和HSV模型是数字图像处理中颜色空间中的两种重要表示方式&#xff0c;RGB和HSV都是描述颜色的数学模型&#xff0c;可以用于表示和处理图像中的颜色信息。 RGB模型是一种基于光的颜色模型&#xff0c;由红&#xff08;Red&#xff09;、绿&#xff08;Green&#x…...

# 【超全面了解鸿蒙生命周期】-生命周期补充

【超全面了解鸿蒙生命周期】-生命周期补充 鸿蒙所有的生命周期函数梳理 文章目录 【超全面了解鸿蒙生命周期】-生命周期补充前言一、AbilityStage的生命周期二、ExtensionAbility卡片生命周期三、Web组件常用生命周期 前言 本文是继之前写的生命周期函数梳理的进一步补充&…...

黑神话悟空游戏鼠标光标使用教程与下载

效果图&#xff1a; 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话&#xff1a;悟空》游戏中的角色和元素&#xff0c;具有以下特点&#xff1a; • 主题鲜明&#xff1a;光标设计紧扣游戏主题&#xff0c;采用了游戏中的元素&#xff0c;让玩家在使用电脑时也能感受到…...

【机器学习】梯度下降

文章目录 1. 梯度下降概念2. 梯度下降的技巧2.1 动态设置学习率2.2 Adagrad调整梯度2.3 随机梯度下降&#xff08;SGD&#xff09;2.4 特征缩放 3. 梯度下降理论基础 1. 梯度下降概念 梯度&#xff1a;Loss 对参数在某一点的偏微分&#xff0c;函数沿梯度的方向具有最大的变化…...

【leetcode 07】707.设计链表

要点⭐ 链表的常见操作 获取第n个节点的值 头部插入节点 尾部插入节点 第n个节点前插入&#xff08;先立新&#xff0c;在破旧&#xff09; 删除第n个节点 class ListNode{int val;ListNode next;ListNode(){};ListNode(int val){this.valval;} } class MyLinkedList {//链表大…...

【Spring】详解(上)

Spring 框架核心原理与应用&#xff08;上&#xff09; 一、Spring 框架概述 &#xff08;一&#xff09;诞生背景 随着 Java 应用程序规模的不断扩大以及复杂度的日益提升&#xff0c;传统的 Java开发方式在对象管理、代码耦合度等方面面临诸多挑战。例如&#xff0c;对象之…...

短视频矩阵系统后端源码搭建实战与技术详解,支持OEM

一、引言 随着短视频行业的蓬勃发展&#xff0c;短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑&#xff0c;负责处理复杂的业务逻辑、数据存储与交互&#xff0c;其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…...

力扣每日刷题

24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 递归写法 做题思路&#xff1a;把需要交换的两个数的前一个数作为参数传入&#xff0c;然后使用一个变量保存这两个变量的后一个数&#xff0c;交换这个两个数&#xff0c;最后把第二个数&#xff08;原第一…...

QT的信号和槽页面的应用

完善对话框&#xff0c;点击登录弹出对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…...

【Java】线程相关面试题 (基础)

文章目录 线程与进程区别并行与并发区别解析概念含义资源利用执行方式应用场景 创建线程线程状态如何保证新建的三个线程按顺序执行wait方法和sleep方法的不同所属类和使用场景方法签名和参数说明调用wait方法的前提条件被唤醒的方式与notify/notifyAll方法的协作使用示例注意事…...

【数字化】华为一体四面细化架构蓝图

导读&#xff1a;华为的“一体四面”企业架构设计方法是一种综合性的管理框架&#xff0c;它通过业务架构、信息架构、应用架构和技术架构的集成设计&#xff0c;构建出一个既符合业务需求&#xff0c;又具备高度灵活性和可扩展性的IT系统。这种架构设计方法强调从业务视角出发…...

frameworks 之 WMS添加窗口流程

frameworks 之 触摸事件窗口查找 1.获取WindowManager对象2.客户端添加view3. 服务端添加view (NO_SURFACE)4.重新布局 (DRAW_PENDING)4.1 创建 SurfaceControl 5.通知绘制 (COMMIT_DRAW_PENDING&#xff0c; READY_TO_SHOW&#xff0c; HAS_DRAWN)5. 1 布局测量和刷新 6.总结 …...

搜索方法归类全解析

搜索方法归类全解析 搜索方法是人工智能和计算机科学中用于解决问题、优化路径或发现数据模式的关键技术。根据不同的标准&#xff0c;搜索方法可以被分为多种类别。本文将详细介绍这些分类标准&#xff0c;并探讨每一类的特点及其代表算法&#xff0c;同时补充更多关于搜索的相…...

第1关:简易考试系统之用户注册

任务描述 本关任务&#xff1a;实现简易考试系统中新用户注册的功能。 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释&#xff0c;在 Begin-End 中实现简易考试系统中新用户注册的功能&#xff0c;具体要求如下&#xff1a; User.java 提供了用户的基本信息&#xff0c…...

VMware的三种网络模式——在NAT模式下开放接口为局域网内其他主机提供服务

众所周知 VMware 有三种常用的网络通讯模式&#xff0c;分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;&#xff0c;它们各有不同的用法。 Bridged 桥接模式是与主机…...

智慧地下采矿:可视化引领未来矿业管理

图扑智慧地下采矿可视化平台通过整合多源数据&#xff0c;提供实时 3D 矿井地图及分析&#xff0c;提升了矿产开采的安全性与效率&#xff0c;为矿业管理提供数据驱动的智能决策支持&#xff0c;推动行业数字化转型。...

流量主微信小程序工具类去水印

工具类微信小程序流量主带后台管理&#xff0c;可开通广告&#xff0c;带自有后台管理&#xff0c;不借助第三方接口 介绍 支持抖音&#xff0c;小红书&#xff0c;哔哩哔哩视频水印去除&#xff0c;功能实现不借助第三方平台。可实现微信小程序流量主广告变现功能&#xff0c…...