Playwright+Bs4爬取微信公众号文章链接

前言

1、由于搜狗搜索只能看到最近十篇文章
2、有找到过从网页端微信获取的,但是我的微信网页端登不上只能放弃
3、还有了解过pywinauto的windows的自动化,但是已经用过playwright,还要花时间去学习
4、找到有利用公众号后台的超链接进行爬取的方法
因此决定使用playwright来解决这个问题

1、playwright录制脚本

首先使用playwright录制脚本,将大概的过程进行录制:
playwright codegen -o wehcet_fetch.py https://mp.weixin.qq.com/
在录制前要想好大概的步骤,以及后面需要进行循环的翻页操作

2、设置循环

由于在后台页面只要在超链接里操作就可以,所以只需要设置:
1、更换公众号名字的循环
picture
2、同一个公众号文章翻页循环

在这里插入图片描述


通过这两步即将整个的流程处理完成了
下面就是run()函数,传入的参数分别是:

name: 公众号名字列表
all_artical: 储存文章的列表
def run(playwright: Playwright,name,all_artical) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context(accept_downloads=True)
    # Open new page
    page = context.new_page()
    # with page.expect_download() as download_info:
    # Go to https://mp.weixin.qq.com/
    page.goto("https://mp.weixin.qq.com/")

    # Click text=图文消息 文字消息 视频消息 音频消息 图片消息 转载 >> svg
    with page.expect_popup() as popup_info:
        page.click("text=图文消息 文字消息 视频消息 音频消息 图片消息 转载 >> svg")
    page1 = popup_info.value
    # 公众号数量,用来定位all_artical
    num = 0
    # Click text=超链接
    page1.click("text=超链接")
    # 遍历所有名字,分别爬取
    for item in name:
        # 保存在一个列表中的一个列表中
        all_artical.append([])
        # Click text=选择其他公众号
        page1.click("text=选择其他公众号")
        # Click [placeholder="输入文章来源的公众号名称或微信号,回车进行搜索"]
        page1.click("[placeholder=\"输入文章来源的公众号名称或微信号,回车进行搜索\"]")
        # Fill [placeholder="输入文章来源的公众号名称或微信号,回车进行搜索"]
        page1.fill("[placeholder=\"输入文章来源的公众号名称或微信号,回车进行搜索\"]", item)
        # Click [placeholder="输入文章来源的公众号名称或微信号,回车进行搜索"]
        page1.click("[placeholder=\"输入文章来源的公众号名称或微信号,回车进行搜索\"]")
        # Press Enter
        page1.press("[placeholder=\"输入文章来源的公众号名称或微信号,回车进行搜索\"]", "Enter")
        # Click text=阮一峰的网络日志 微信号:ruanyf-blog
        page1.click("text=订阅号")
        time.sleep(3)
        # Click text=下一页
        # 当到最后一页时,没有下一页,退出循环
        while True:
            if page1.is_editable(
                    "#vue_app > div.weui-desktop-link-dialog > div.weui-desktop-dialog__wrp > div > div.weui-desktop-dialog__bd > div.link_dialog_panel > form:nth-child(1) > div:nth-child(4) > div > div > div.weui-desktop-media__list-wrp > div > div"):
                # 获取网页源码,使用bs4分析,提取链接,返回文章数量
                numbers = artical_save(page1, num)
                if numbers<5:
                    break
                else:
                    page1.click("text = 下一页")
                    time.sleep(random.random()*10)
                    continue

这个函数中需要注意的是:
1、大的循环的设定位置在打开超链接之后,点击选择其他公众号之前
2、小的翻页循环设定在搜索公众号之后,循环下一页
3、判断是否到最后一页,由于我目前没有找到可行的方法,只能使用判断最后一页的文章个数小于五来跳出循环,虽然问题很大,但我就赌他最后一页不是五个QAQ。

3、总结

3.1、目前的问题

1、最后一页的判断方法有问题
2、由于微信公众号的限制,导致翻页过快,系统会封禁一段时间,所以需要将翻页时间设定较长时间,但是经过我的实验,在结束第一个60页的公众号后,到第二个还是会出现系统错误的问题,无法翻页,此问题目前还未解决。
3、没有设置自动登录。
4、playwright应该有可以直接获取页面信息的方法,但目前我还没有找到,只能通过BeautifulSoup来分析页面.

最后的完整源码在我的GitHub上,欢迎下载。

### 如何在 Python 中安装 Playwright 要在 Python 环境中使用 Playwright,首先需要确保已正确安装 Playwright 及其依赖项。以下是关于如何安装 Playwright 的说明: #### 安装 Playwright 可以通过 `pip` 工具来安装 PlaywrightPython 版本。执行以下命令即可完成安装: ```bash pip install playwright ``` 安装完成后,还需要下载所需的浏览器二进制文件以便运行自动化测试或爬虫脚本。这一步可通过以下命令实现: ```bash playwright install ``` 此命令会自动下载 Chromium 浏览器以及其他支持的浏览器版本(如果需要的话)。对于特定需求,也可以指定仅安装某个浏览器,例如 Firefox 或 WebKit。 #### 使用 Playwright 编写简单脚本 为了验证安装是否成功以及熟悉基本操作,可以编写如下示例代码并将之保存为 `.py` 文件[^4]: ```python from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 启动带有图形界面的浏览器实例 page = browser.new_page() page.goto("https://example.com") # 打开目标网站 title = page.title() # 获取页面标题 print(f"The webpage's title is {title}") # 输出标题到控制台 browser.close() ``` 将上述代码保存为 `test_example.py` 并通过终端运行该脚本以观察效果: ```bash python test_example.py ``` #### 结合 BeautifulSoup 进行网页解析 当利用 Playwright 抓取动态加载的内容之后,可能还需进一步处理 HTML 数据。此时可借助于 Python 的另一个强大工具——BeautifulSoup 来完成这一任务[^2]: ```python from bs4 import BeautifulSoup html_content = """ <html><head><title>Example Website</title></head> <body><p>This is an example paragraph.</p></body></html> """ soup = BeautifulSoup(html_content, 'html.parser') print(soup.find('title').text) # 提取<title>标签中的文本内容 ``` 以上即是在 Python 中设置和初步应用 Playwright 的方法概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值