从0到建网站,网站排名是怎么做,网站后台维护月薪多少,湖北最新消息使用 Selenium 和 Python 爬取腾讯新闻#xff1a;从基础到实践
在这篇博客中#xff0c;我们将介绍如何利用 Selenium 和 Python 爬取腾讯新闻的内容#xff0c;并将结果保存到 CSV 文件中。本教程包含以下内容#xff1a;
项目简介依赖安装实现功能的代码实现中的关键技…使用 Selenium 和 Python 爬取腾讯新闻从基础到实践
在这篇博客中我们将介绍如何利用 Selenium 和 Python 爬取腾讯新闻的内容并将结果保存到 CSV 文件中。本教程包含以下内容
项目简介依赖安装实现功能的代码实现中的关键技术完整代码运行结果与注意事项 1. 项目简介
腾讯新闻网站包含丰富的新闻资源。我们的目标是
爬取文章的标题和部分内容200个字符。点击“下一页”按钮后跳转到新页面并继续爬取。处理爬取内容中的特殊字符。将爬取到的内容保存到 CSV 文件中。
本项目适合初学者学习 Selenium 的基础操作例如页面切换和元素交互。 2. 依赖安装
在开始前需要安装以下依赖
Python 环境确保安装了 Python 3.7 或以上版本。Selenium用于网页自动化。WebDriver Manager自动管理浏览器驱动。
运行以下命令安装必要的库
pip install selenium webdriver-manager pandas3. 实现功能的代码
以下是主要功能实现
1. Selenium 驱动设置
通过 WebDriver Manager 自动管理 ChromeDriver避免手动下载和配置。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManagerdef setup_driver():options Options()options.add_argument(--headless) # 无头模式运行options.add_argument(--disable-gpu)driver webdriver.Chrome(serviceService(ChromeDriverManager().install()), optionsoptions)return driver2. 点击下一页并切换窗口
实现点击下一页按钮切换到新打开的窗口并关闭旧窗口。
from selenium.webdriver.common.by import By
import timedef click_next_and_switch_window(driver):current_window driver.current_window_handlenext_button driver.find_element(By.XPATH, /html/body/div[3]/div[1]/div[3]/div/div/ul/li[6]/div[2]/h3/a)next_button.click()time.sleep(3)all_windows driver.window_handlesdriver.close()driver.switch_to.window(all_windows[-1])time.sleep(2)3. 爬取文章内容
爬取标题和正文的前200个字符并使用正则表达式清理标题。
import redef crawl_tencent_news(start_url, max_articles50):driver setup_driver()articles []driver.get(start_url)time.sleep(2)for _ in range(max_articles):try:title driver.find_element(By.XPATH, //*[iddc-normal-body]/div[3]/div[1]/div[1]/div[2]/h1).texttitle re.sub(r[^a-zA-Z0-9\u4e00-\u9fa5\s。], , title)content driver.find_element(By.XPATH, //*[idArticleContent]/div[2]/div).textshort_content content[:200]articles.append({Title: title, Content: short_content})click_next_and_switch_window(driver)except:breakdriver.quit()return articles4. 保存为 CSV
将爬取到的内容保存到 CSV 文件中。
import pandas as pddef save_to_csv(articles, filename):df pd.DataFrame(articles)df.to_csv(filename, indexFalse, encodingutf-8)print(f已将 {len(articles)} 篇文章保存到 {filename}.)4. 完整代码
以下是完整代码整合
import re
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import time
import pandas as pddef setup_driver():options Options()options.add_argument(--headless)options.add_argument(--disable-gpu)driver webdriver.Chrome(serviceService(ChromeDriverManager().install()), optionsoptions)return driverdef click_next_and_switch_window(driver):current_window driver.current_window_handlenext_button driver.find_element(By.XPATH, /html/body/div[3]/div[1]/div[3]/div/div/ul/li[6]/div[2]/h3/a)next_button.click()time.sleep(3)all_windows driver.window_handlesdriver.close()driver.switch_to.window(all_windows[-1])time.sleep(2)def crawl_tencent_news(start_url, max_articles50):driver setup_driver()articles []driver.get(start_url)time.sleep(2)for _ in range(max_articles):try:title driver.find_element(By.XPATH, //*[iddc-normal-body]/div[3]/div[1]/div[1]/div[2]/h1).texttitle re.sub(r[^a-zA-Z0-9\u4e00-\u9fa5\s。], , title)content driver.find_element(By.XPATH, //*[idArticleContent]/div[2]/div).textshort_content content[:200]articles.append({Title: title, Content: short_content})click_next_and_switch_window(driver)except:breakdriver.quit()return articlesdef save_to_csv(articles, filename):df pd.DataFrame(articles)df.to_csv(filename, indexFalse, encodingutf-8)print(f已将 {len(articles)} 篇文章保存到 {filename}.)def main():start_url https://news.qq.com/rain/a/20241201A03DNQ00articles crawl_tencent_news(start_url, max_articles50)if articles:save_to_csv(articles, tencent_articles.csv)if __name__ __main__:main()5. 运行结果与注意事项
结果
运行代码后将爬取到的文章标题和内容保存到 tencent_articles.csv 文件中数据示例如下
TitleContent腾讯新闻标题示例这是文章内容的前200个字符…
注意事项
网络延迟需要确保网络连接畅通避免加载超时。页面变化目标网站的结构可能会变化需定期更新 XPath。反爬机制添加 time.sleep() 避免触发反爬机制。 希望这篇博客能帮助你理解和实践 Selenium 爬虫的开发过程如有疑问请随时留言讨论