在这篇博客中,我将分享如何使用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排行榜页面抓取数据。具体步骤如下:
- 初始化参数:设置Chrome浏览器的选项,使其在无头模式下运行。
- 打开页面:使用Selenium打开指定的URL。
- 等待页面加载完成:使用WebDriverWait等待页面加载完成。
- 获取页面源代码:获取页面的HTML内容。
- 关闭浏览器:关闭浏览器以释放资源。
- 解析HTML内容:使用BeautifulSoup解析HTML内容。
- 查找数据:查找符合特定格式的数据并提取信息。
- 打印结果:打印提取的数据。
扩展
可以对代码进行以下扩展:
- 错误处理:增加更多的错误处理机制,以应对不同的异常情况。
- 数据存储:将提取的数据存储到数据库或文件中,以便后续分析。
- 多页面抓取:如果需要抓取多个页面的数据,可以增加翻页功能。
- 数据清洗:对提取的数据进行清洗和格式化,以便更好地使用。
相关类型扩展
类似的技术可以应用于其他类型的数据抓取任务,例如:
- 电商网站数据抓取:抓取商品信息、价格、评论等数据。
- 社交媒体数据抓取:抓取用户发布的内容、评论、点赞等数据。
- 新闻网站数据抓取:抓取新闻标题、内容、发布时间等数据。
- 招聘网站数据抓取:抓取职位信息、公司信息、薪资等数据。
爬虫项目推荐
- 使用 Python 指定内容 爬取百度引擎搜索结果-CSDN博客
- 使用Python和Selenium爬取QQ新闻热榜-CSDN博客
- 使用Selenium 和 Python 抓取快手网页大量评论-CSDN博客
- 使用 Python 和 Selenium 爬取快手视频 附源码-CSDN博客
- 如何使用Python、Selenium 爬取酷狗音乐网站的歌曲信息-CSDN博客
- 使用Python 和 Selenium 抓取 酷狗 音乐专辑 附源码-CSDN博客
其他项目推荐
- 使用 TensorFlow 和 CIFAR-10 数据集进行图像分类-CSDN博客
- 在 Python 中编写一个简单的文件搜索工具-CSDN博客
- 使用Python从.exe文件中提取图标_提取文件图标-CSDN博客
- Python 文件搜索程序详解与实现-CSDN博客
- 使用Python 进行文本情感分析-CSDN博客
- 使用 Python和PyQt5 打造 你的专属文件查询工具! 附源码-CSDN博客
- 用Python和PyQt5打造你的专属音乐播放器!轻松创建带封面的音乐列表-CSDN博客
总结
通过这篇博客,我们学习了如何使用Python、Selenium和BeautifulSoup爬取CSDN博客页面上的特定数据。我们详细介绍了每个步骤的实现方法,并提供了完整的代码示例。希望这篇博客对你有所帮助!
结论
这段代码展示了如何使用Selenium和BeautifulSoup进行网页数据抓取。通过适当的扩展和调整,可以应用于各种不同的数据抓取任务,为数据分析和研究提供支持。
欢迎在评论区留言。继续探索和学习,祝你在深度学习的旅程中取得更多的成果!🚀
希望这个博客对你有所帮助!如果你有任何问题需要进一步的指导,请随时提问。继续加油! 🚀