【Python 爬虫】爬取专栏文章标题保存到 CSV 文件中

本文介绍了如何使用Python爬虫从指定网页抓取微机系统与接口上机实验_TD PITE型专栏的文章标题,并将其保存到CSV文件。通过分析网页结构,利用requests库获取网页内容,BeautifulSoup库解析HTML,提取<h2>标签中的标题信息,最后将数据写入CSV文件,避免乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

爬取专栏文章标题保存到 CSV 文件中

目标

从一个网页上抓取数据,并保存到一个 CSV 文件中

具体是爬取 微机系统与接口上机实验_TD PITE型 专栏里的所有 文章标题保存到 csv 文件 中。

在这里插入图片描述

分析网页

网址:https://blog.csdn.net/xiaoyuting999/category_12222173.html

打开浏览器开发人员工具:

方法一:点击浏览器(以 Edge 浏览器为例)右上角三个点 ⋯ \cdots -> 更多工具 -> 开发人员工具

方法二:在网页右键,检查

方法三:windows 直接快捷键 fn(若有) + f12

打开页面如下:

在这里插入图片描述

按照如下图操作,

在这里插入图片描述

可以看到,我们定位到了 h2 标签,也就是说该页面中的 文章标题所在的元素 都是 应用了 h2 标签,所以我们需要 提取出该页面所有的 h2 标签,然后 再提取出 h2 标签的 text 内容即文章标题

在这里插入图片描述

代码及理解

# 导入 requests 库和 BeautifulSoup 库
import requests
from bs4 import BeautifulSoup

# 定义要抓取数据的网页 URL
url = "https://blog.csdn.net/xiaoyuting999/category_12222173.html"

# 发送 GET 请求到网页,获取响应对象
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76'
}
response = requests.get(url, headers = headers)

# 从响应对象中解析出 HTML 内容
html = response.text

# 用 BeautifulSoup 库解析 HTML 内容,创建一个 soup 对象
soup = BeautifulSoup(html, "html.parser")

# 从 soup 对象中找到所有的 h2 标签,它们包含了文章标题
h2_tags = soup.find_all("h2")

# 创建一个空列表,用来存储文章标题
titles = []

# 遍历所有的 h2 标签,提取出它们的文本内容(即文章标题),并添加到列表中
for tag in h2_tags:
    title = tag.text.strip()
    titles.append(title)



# 导入 csv 库
import csv

# 定义要保存数据的 CSV 文件名
csv_file = "article_titles.csv"

# 以写入模式打开 CSV 文件,创建一个 csv.writer 对象
with open(csv_file, "w") as file:
    writer = csv.writer(file)

    # 遍历标题列表,把每个标题写入到 CSV 文件中
    for title in titles:
        writer.writerow([title])

# 打印提示信息,表示程序运行结束
print("Article titles scraped and saved to CSV file.")




# 以下代码是防止爬取的内容存储到 csv 文件中出现乱码
# 用 Python 代码来检测和转换文件的编码,使用 chardet 库来检测文件的编码,然后使用 codecs 库来转换文件的编码

# 导入 chardet 和 codecs 库
import chardet
import codecs

# 定义要检测和转换的 csv 文件名
csv_file = "article_titles.csv"

# 以二进制模式打开 csv 文件,读取文件内容
with open(csv_file, "rb") as file:
    data = file.read()

# 使用 chardet 库检测文件的编码
encoding = chardet.detect(data)["encoding"]

# 打印文件的编码
print(f"The encoding of {csv_file} is {encoding}")

# 如果文件的编码不是 UTF-8,就转换为 UTF-8
if encoding != "utf-8":
    # 使用 codecs 库以原始编码打开 csv 文件,读取文件内容
    with codecs.open(csv_file, "r", encoding) as file:
        content = file.read()

    # 使用 codecs 库以 UTF-8 编码写入 csv 文件,覆盖原始内容
    with codecs.open(csv_file, "w", "utf-8") as file:
        file.write(content)

    # 打印提示信息,表示转换成功
    print(f"The encoding of {csv_file} has been converted to UTF-8")

代码可以分为三个小部分,

  • 第一部分是 从网页中提取出文章标题
  • 需要知道 待爬取的网页的 URL
  • 使用 requests 库对 URL 对应的网页进行 抓取
  • 使用 BeautifulSoup 库对抓取的网页进行 解析
  • 第二部分是将提取出的文章标题 存储到 CSV 文件中
  • 第三部分是 防止 CSV 文件出现乱码而做的工作

代码段一

# 发送 GET 请求到网页,获取响应对象
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76'
}
response = requests.get(url, headers = headers)

这段代码使用 requests 库发送一个 GET 请求到目标网页,通过设置请求头信息来模拟浏览器发送请求

  • 这里使用 requests.get() 函数发送 GET 请求时,创建了一个字典类型的变量 h e a d e r s headers headers,其中包含了 请求头信息

  • 请求头信息是 向服务器发送请求时传递的一些额外信息,用于告诉服务器请求的详细情况。在这段代码中,设置了 User-Agent 字段,这是一个常见的请求头字段,用于 标识客户端的浏览器类型和版本

  • 请求头信息并非必须设置,但在实际应用中,设置适当的请求头信息可以提高请求的成功率,并模拟特定的客户端类型来获取更好的响应

以下是一些常见的请求头信息(详细内容见 准备篇(五)开发人员工具):

  • User-Agent(用户代理):用于 标识客户端的浏览器类型和版本

例如:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
  • Accept(接受内容类型):用于 告诉服务器客户端能够接受的内容类型

例如:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  • Referer(来源页面):用于 指示当前请求的来源页面地址

例如:

Referer: https://www.example.com
  • Cookie(Cookie 信息):用于 在请求中发送 HTTP Cookie

例如:

Cookie: sessionid=××××××; username=×××
  • Authorization(授权信息):用于 在需要身份验证的请求中发送认证凭据

例如:

Authorization: Bearer your_token_here

代码段二

# 创建一个空列表,用来存储文章标题
titles = []

# 遍历所有的 h2 标签,提取出它们的文本内容(即文章标题),并添加到列表中
for tag in h2_tags:
    title = tag.text.strip()
    titles.append(title)

title = tag.text.strip():对于每个 h2 标签,使用 .text 属性获取其文本内容,然后使用 .strip() 方法去除文本内容两端的空格和换行符,将处理后的标题文本赋值给变量 t i t l e title title

titles.append(title):将处理后的标题添加到 t i t l e s titles titles 列表中。

最终, t i t l e s titles titles 列表中存储了从 HTML 页面中提取的所有文章标题。

成果展示

该专栏所有的文章标题都提取到 article_titles.csv 文件中,并且没有乱码。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯水果茶!

谢谢你的水果茶啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值