用pyautogui爬公众号文章

因为我关注的这个公众号文章内容很简单,基本都是纯文字,所以直接全选复制文本就可以了,用pyautogui比selenium还来得快。

摘要:

  1. 用 pyautogui 控制公众号文章列表的滚动和点击
  2. 用 pyautogui 发送快捷键全选复制网页文本
  3. 用 pyperclip 接收剪切板中的文字

特别注意:

  1. 每次打开新网页或者回到公众号文章列表,都要在网页或控件上再次点击鼠标,否则鼠标焦点可能还在桌面或者别的地方

import pyperclip
import pyautogui,time

def process_clipboard(text):
    lines = text.split("\n")

    lines[0] = "## " + lines[0]
    lines[1] = lines[1].strip() + "," + lines[2]
    lines[2] = '\n'
    for i in range(1,10):
        lines.pop(-1) # 直接删掉文章最后几行
    return ("".join(lines),lines[0]+lines[1])  # 返回文章,和标题(用于记录日志)

def work():
    # 记住,运行代码之前要把公众号文章列表拉到尾部,直到不出现列表
    dest_file = open("D:\\xx\\vuepress\\xx\\xx\\xx\\xxx.md", "a", encoding='utf-8')

    pyautogui.click(1336, 1065) # 点击任务栏的微信图标
    pyautogui.click(1230, 800)  # 点击公众号文章列表灰色区域,使鼠标回到列表控件
    pyautogui.scroll(30) # 滚轮向上滚动
    time.sleep(1)
    i = 0
    while i < 109:  # 滚动次数,一次处理4篇文章
        if i > 0:
            pyautogui.click(1230, 800)  # 点击公众号文章列表灰色区域,使鼠标回到列表控件
            pyautogui.scroll(317)  # 一次滚4篇文章,这个高度要自己用 pyautogui.position() 去试出来
            time.sleep(0.5)
        j = 0
        while j < 4:
            if j != 0:
                # pyautogui.click(1336, 1065)
                pyautogui.click(1230, 800)  # 点击公众号文章列表灰色区域,使鼠标回到列表控件
                time.sleep(0.5)
            pyautogui.click(1000, 900 - 130 * j) # 循环点击4篇文章
            time.sleep(0.5)
            pyautogui.click(1230, 800)  # 点击公众号文章列表灰色区域,使鼠标回到列表控件
            pyautogui.hotkey('ctrl', 'a') # 快捷键,全选
            time.sleep(1)
            pyautogui.hotkey('ctrl', 'c')  # 快捷键,复制
            clipboard_content = pyperclip.paste() # 获取剪切板复制的内容
            text = process_clipboard(clipboard_content) # 处理文本
            dest_file.write(text[0]) # 把处理后的文本写入文件
            print(i*4+j, text[1]) # 打印日志
            pyautogui.click(1898, 16) # 关闭网页
            j += 1
        i += 1

if __name__ == '__main__':
    work()
posted @ 2024-09-23 16:01  水天需  阅读(12)  评论(0编辑  收藏  举报