Python爬虫程序抓取微信公众号文章并保存到Excel文件

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

写一个爬虫程序,按下面的要求在我的 windows 电脑上帮我抓取微信公众号文章。

  1. 使用 python3 和最新版的 selenium
  2. 目标网站:https://weixin.sogou.com/
  3. 输入关键字[ AI ],点击[ 搜文章 ]按钮
  4. 爬取内容: 爬取标题、摘要、链接、来源
  5. 爬取后的内容保存到Excel文件中,Excel文件命名为AI_微信_时间
  6. 爬取前5页,每爬完1页休眠5s 请给我完整可运行的程序,让我看到浏览器中操作的过程,并指导我安装程序依赖的所有库。 你可以先执行步骤 2 和步骤 3 了解网页的结构,然后再生成代码。
回答:

好的,我会为你编写一个完整的爬虫程序,并指导你安装所需的依赖库。我们将使用 selenium 库来控制浏览器,并使用 pandas 库来保存数据到 Excel 文件中。

安装依赖库

首先,你需要安装以下 Python 库:

  1. selenium:用于浏览器自动化。
  2. pandas:用于数据处理和保存到 Excel 文件。
  3. openpyxl:用于 pandas 保存 Excel 文件。

你可以使用以下命令来安装这些库:

pip install selenium pandas openpyxl

下载 WebDriver

你还需要下载与浏览器匹配的 WebDriver。例如,如果你使用的是 Chrome 浏览器,你需要下载 ChromeDriver。你可以从以下链接下载:

ChromeDriver - WebDriver for Chrome

下载后,将 chromedriver.exe 放在你的系统路径中,或者记下它的路径以便在代码中使用。

完整的爬虫程序

以下是完整的爬虫程序:

import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from datetime import datetime

# 配置 ChromeDriver 路径
chrome_driver_path = 'path/to/chromedriver.exe'  # 替换为你的 chromedriver 路径

# 配置 Chrome 选项
chrome_options = Options()
chrome_options.add_argument("--start-maximized")

# 初始化 WebDriver
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)

# 打开目标网站
driver.get("https://weixin.sogou.com/")

# 输入关键字并搜索
search_box = driver.find_element(By.ID, "query")
search_box.send_keys("AI")
search_box.send_keys(Keys.RETURN)

# 等待页面加载
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "sogou_vr_11002601_title_0")))

# 爬取数据
data = []

for page in range(1, 6):
    print(f"正在爬取第 {page} 页...")
    articles = driver.find_elements(By.CSS_SELECTOR, ".news-list li")

    for article in articles:
        try:
            title_element = article.find_element(By.CSS_SELECTOR, "h3 a")
            title = title_element.text
            link = title_element.get_attribute("href")
            summary = article.find_element(By.CSS_SELECTOR, ".txt-info").text
            source = article.find_element(By.CSS_SELECTOR, ".account").text

            data.append({
                "标题": title,
                "摘要": summary,
                "链接": link,
                "来源": source
            })
        except Exception as e:
            print(f"跳过一篇文章,原因: {e}")

    # 翻页
    if page < 5:
        next_button = driver.find_element(By.LINK_TEXT, "下一页")
        next_button.click()
        time.sleep(5)

# 关闭浏览器
driver.quit()

# 保存数据到 Excel 文件
df = pd.DataFrame(data)
current_time = datetime.now().strftime("%Y%m%d_%H%M%S")
excel_filename = f"AI_微信_{current_time}.xlsx"
df.to_excel(excel_filename, index=False)

print(f"数据已保存到 {excel_filename}")

运行程序

  1. 确保你已经安装了所有依赖库,并下载了与浏览器匹配的 WebDriver。
  2. chromedriver.exe 的路径替换到代码中的 chrome_driver_path 变量。
  3. 运行上述 Python 脚本。

运行过程中,你会看到浏览器自动打开并执行搜索操作,爬取数据并保存到 Excel 文件中。每爬取一页后会休眠 5 秒,直到爬取完前 5 页的数据。