使用Python 和 Selenium 爬取CSDN 博客排行榜数据 附源码

在这篇博客中,我将分享如何使用Python、Selenium和BeautifulSoup爬取CSDN博客页面上的特定数据。我们将通过一个示例代码展示如何实现这一目标。

准备工作

首先,我们需要安装一些必要的库:

pip install selenium beautifulsoup4

步骤说明和代码解析

1. 初始化参数

我们使用Options配置Chrome浏览器为无头模式,并设置其他参数以确保浏览器在服务器环境中正常运行。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

2. 使用Selenium打开页面

我们使用Selenium打开CSDN博客的指定页面,并等待页面加载完成。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(options=chrome_options)
url = 'https://blog.csdn.net/rank/list/content?type=python'
driver.get(url)

try:
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'hosetitem-dec'))
    )
except Exception as e:
    print("Error: ", e)
    driver.quit()

3. 获取页面源代码

在页面加载完成后,我们获取页面的源代码。

html_content = driver.page_source
driver.quit()

4. 使用BeautifulSoup解析HTML内容

我们使用BeautifulSoup解析页面源代码,查找所有符合特定格式的数据。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
data_list = []

for item in soup.find_all('div', class_='hosetitem-dec'):
    name_tag = item.find_previous('a', class_='name')
    num_tag = item.find_previous('span', class_='num')
    views_tag = item.find_all('span', style='margin-right: 4px;')[0]
    comments_tag = item.find_all('span', style='margin-right: 4px;')[1]
    favorites_tag = item.find_all('span', style='margin-right: 4px;')[2]

    if name_tag and num_tag and views_tag and comments_tag and favorites_tag:
        name = name_tag.text
        num = num_tag.text
        views = views_tag.text
        comments = comments_tag.text
        favorites = favorites_tag.text

        data_list.append({
            'name': name,
            'num': num,
            'views': views,
            'comments': comments,
            'favorites': favorites
        })

5. 打印结果

迭代打印提取的数据。

for data in data_list:
    print(f"作者: {data['name']}, 热度: {data['num']}, 浏览: {data['views']}, 评论: {data['comments']}, 收藏: {data['favorites']}")

print("数据爬取完成。")

完整代码

以下是完整的代码:

import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化参数
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# 使用Selenium打开页面
driver = webdriver.Chrome(options=chrome_options)
url = 'https://blog.csdn.net/rank/list/content?type=python'
driver.get(url)

# 等待页面加载完成
try:
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'hosetitem-dec'))
    )
except Exception as e:
    print("Error: ", e)
    driver.quit()

# 获取页面源代码
html_content = driver.page_source

# 关闭浏览器
driver.quit()

# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')

# 查找所有符合特定格式的数据
data_list = []
for item in soup.find_all('div', class_='hosetitem-dec'):
    name_tag = item.find_previous('a', class_='name')
    num_tag = item.find_previous('span', class_='num')
    views_tag = item.find_all('span', style='margin-right: 4px;')[0]
    comments_tag = item.find_all('span', style='margin-right: 4px;')[1]
    favorites_tag = item.find_all('span', style='margin-right: 4px;')[2]

    if name_tag and num_tag and views_tag and comments_tag and favorites_tag:
        name = name_tag.text
        num = num_tag.text
        views = views_tag.text
        comments = comments_tag.text
        favorites = favorites_tag.text

        data_list.append({
            'name': name,
            'num': num,
            'views': views,
            'comments': comments,
            'favorites': favorites
        })

# 打印结果
for data in data_list:
    print(f"作者: {data['name']}, 热度: {data['num']}, 浏览: {data['views']}, 评论: {data['comments']}, 收藏: {data['favorites']}")

print("数据爬取完成。")

运行结果

运行上述代码后,你将看到类似以下的输出:

说明

这段代码使用Selenium和BeautifulSoup从CSDN博客的Python排行榜页面抓取数据。具体步骤如下:

  1. 初始化参数:设置Chrome浏览器的选项,使其在无头模式下运行。
  2. 打开页面:使用Selenium打开指定的URL。
  3. 等待页面加载完成:使用WebDriverWait等待页面加载完成。
  4. 获取页面源代码:获取页面的HTML内容。
  5. 关闭浏览器:关闭浏览器以释放资源。
  6. 解析HTML内容:使用BeautifulSoup解析HTML内容。
  7. 查找数据:查找符合特定格式的数据并提取信息。
  8. 打印结果:打印提取的数据。

扩展

可以对代码进行以下扩展:

  1. 错误处理:增加更多的错误处理机制,以应对不同的异常情况。
  2. 数据存储:将提取的数据存储到数据库或文件中,以便后续分析。
  3. 多页面抓取:如果需要抓取多个页面的数据,可以增加翻页功能。
  4. 数据清洗:对提取的数据进行清洗和格式化,以便更好地使用。

相关类型扩展

类似的技术可以应用于其他类型的数据抓取任务,例如:

  1. 电商网站数据抓取:抓取商品信息、价格、评论等数据。
  2. 社交媒体数据抓取:抓取用户发布的内容、评论、点赞等数据。
  3. 新闻网站数据抓取:抓取新闻标题、内容、发布时间等数据。
  4. 招聘网站数据抓取:抓取职位信息、公司信息、薪资等数据。

      爬虫项目推荐

    其他项目推荐

总结

通过这篇博客,我们学习了如何使用Python、Selenium和BeautifulSoup爬取CSDN博客页面上的特定数据。我们详细介绍了每个步骤的实现方法,并提供了完整的代码示例。希望这篇博客对你有所帮助!

结论

这段代码展示了如何使用Selenium和BeautifulSoup进行网页数据抓取。通过适当的扩展和调整,可以应用于各种不同的数据抓取任务,为数据分析和研究提供支持。

欢迎在评论区留言。继续探索和学习,祝你在深度学习的旅程中取得更多的成果!🚀


希望这个博客对你有所帮助!如果你有任何问题需要进一步的指导,请随时提问。继续加油! 🚀

  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LIY若依

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值