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

举报
HUAWEIXIAZHI 发表于 2024/11/26 11:52:44 2024/11/26
【摘要】 探索CSDN博客数据:使用Python爬虫技术

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

前提声明

  • 爬虫应遵守目标网站的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).text
    if len(myPage) < 30000:
        break

    print(f'-----------------------------第 {page_num} 页---------------------------------')
    doc = pq(myPage)
    articles = doc(".article-list > div").items()
    for i, item in enumerate(articles):
        if i == 0:
            continue
        title = 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,以便构建访问的URL。
  2. 请求头设置:为了模拟浏览器访问,我们设置了请求头,这是许多网站反爬虫机制的一部分。
  3. 获取页面内容:使用requests库发送HTTP请求,获取博客页面的HTML内容。
  4. 解析HTML:使用pyquery库解析HTML,提取所需的信息,如博客的原创、粉丝、喜欢和评论数量。
  5. 爬取文章列表:通过循环,爬取每一页的文章列表,包括文章的标题、发布日期、阅读量和评论数。

效果展示
image.png

注意事项

  • 遵守爬虫规范:在进行数据爬取时,应该尊重网站的robots.txt文件,不要过度请求,以免给网站服务器带来压力。
  • 数据使用:获取的数据应仅用于个人学习或研究,不得用于商业用途。
  • 法律风险:在爬取数据前,确保你的行为不违反相关法律法规。

结语

通过这个简单的爬虫脚本,你可以轻松地获取CSDN博客的数据,进行进一步的分析或学习。这只是一个基础的示例,你可以根据需要扩展和优化脚本。本文不仅提供了一个实用的爬虫工具,还强调了在爬取数据时应当遵守的规范和法律风险。希望读者能够通过本文的学习,提升自己的数据处理能力,并在实际工作中应用所学知识。如果有任何问题或需要进一步的帮助,请随时联系作者。让我们一起探索数据的无限可能!

总结

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

全部代码

# 例如输入:lwcwam

import requests
from pyquery import PyQuery as pq

# 当前的博客列表页号
page_num = 1

account = 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).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"))

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).text
    if len(myPage) < 30000:
        break

    print('-----------------------------第 %d 页---------------------------------' % (page_num,))

    doc = pq(myPage)
    articles = doc(".article-list > div").items()
    articleList = []
    for i,item in enumerate(articles):
        if i == 0:
            continue
        title = 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
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。