如何使用Python和Pyppeteer爬取动态网页数据

在现代互联网时代,许多网站采用动态加载技术,使得传统的静态网页爬取方法不再有效。本教程将向您介绍如何使用Python和Pyppeteer库来爬取动态网页数据。我们将通过一个实际的示例来演示这一过程,以便您能够掌握这一有用的技能。

准备工作

在开始之前,请确保您已经安装了Python,并按照以下步骤进行准备工作:

  1. 安装Python库:我们将使用pyppeteer库来模拟浏览器操作。您可以使用以下命令来安装它:

    pip install pyppeteer
  2. 确保您了解一些基本的Python编程知识,包括异步编程和基本的Web爬取概念。

创建爬虫程序

下面是一个示例爬虫程序,用于爬取动态加载的网页数据。这个示例程序将从一个网站中获取数据,并演示了如何模拟浏览器操作。

import asyncio
from pyppeteer import launch

from collections import namedtuple

def screen_size():
    """使用tkinter获取屏幕大小"""
    import tkinter
    tk = tkinter.Tk()
    width = tk.winfo_screenwidth()
    height = tk.winfo_screenheight()
    tk.quit()
    return width, height

async def main():
    browser = await launch({'headless': False, 'args': ['--no-sandbox'], })
    page = await browser.newPage()
    width, height = screen_size()
    await page.setViewport(viewport={"width": width, "height": height})
    await page.setJavaScriptEnabled(enabled=True)
    await page.setUserAgent(
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
        '(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'
    )
    await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')
    await page.goto(website.url)

    now_page = 0

    while True:

        now_page += 1
        await page.evaluate('window.scrollBy(0, document.body.scrollHeight)')
        await asyncio.sleep(1)
        li_list = await page.querySelectorAll(website.list_query)

        for li in li_list:
            try:
                title_obj = await li.querySelector("a ")
                title_url = await page.evaluate('(element) => element.href', title_obj)
                title_name = await page.evaluate('(element) => element.textContent', title_obj)
                date_obj = await li.querySelector(website.title_date_query)
                title_date = await page.evaluate('(element) => element.textContent', date_obj)
                detail_page = await browser.newPage()
                await detail_page.goto(url=str(title_url))
                await detail_page.content()
                element = await detail_page.querySelector(website.content_query)
                content_html = await detail_page.evaluate('(element) => element.outerHTML', element)
                print(title_url, title_name, title_date, len(content_html))
                await detail_page.close()
            except Exception as e:
                print(e)
        print(f"第{now_page}页访问>>>>>")
        next_page_link = website.next_page_query

        if next_page_link:
            await page.click(next_page_link)
        else:
            raise Exception("已完成爬取,即将退出...")

        await asyncio.sleep(2)

async def page_close(browser):
    for _page in await browser.pages():
        await _page.close()
    await browser.close()

if __name__ == '__main__':
    Websites = namedtuple('websites', ['url', 'list_query', 'title_date_query', 'content_query', 'next_page_query'])

    websites = [
        (
            'http://www.cqzbtb.cn/_jiaoyixinxi/',
            '.listbox ul',
            '.ys',
            '.article-wrap',
            "body > section > div > div.list-wrap.row > div.listpa > ul > li:nth-child(7)"
        ),

    ]
    for i in websites:
        website = Websites._make(i)

        a = main()
        loop = asyncio.get_event_loop()
        results = loop.run_until_complete(asyncio.gather(a))

这段代码使用Pyppeteer库创建了一个浏览器实例,然后模拟了许多浏览器操作,包括访问网页、滚动页面、点击下一页等。它还演示了如何从网页中提取数据,并处理了异常情况。

结论

通过本教程,您学会了如何使用Python和Pyppeteer库来爬取动态加载的网页数据。这对于需要获取动态生成内容的网站非常有用。请注意,在进行网页爬取时,务必遵守网站的使用政策和法律法规。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:如何使用Python和Pyppeteer爬取动态网页数据

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年11月26日
下一篇 2023年11月26日

相关推荐

  • 今日头条自动爬虫技巧:如何获取头条文章和图片链接

    在如今数字化的时代,自动化的数据获取方法如爬虫技术已成为数据分析、研究和营销中不可或缺的一部分。那么,你是否想过从如今日头条这样的巨大新闻平台上自动获取新闻内容及其相关图片呢?如果你的答案是肯定的,…

    2023年10月10日
    00
  • 如何使用Python爬取BT种子资源并进行分析

    在数字时代,获取各种信息变得愈加便捷,但有时我们需要特定的数据或资源,而互联网上的BT种子资源是一种常见的需求。本教程将向您展示如何使用Python编写爬虫程序,以获取BT种子资源并进行基本的分析。无论是寻找…

    2023年11月26日
    00
  • Python教程:如何使用Python从一个表格中提取数据到另一个表格

    在现代世界中,数据无处不在,而有效地处理和分析数据对于许多行业至关重要。假设你是一位数据分析师,每天需要处理大量的数据表格,提取其中的关键信息。有一天,你接到了一个任务:需要从一个庞大的数据表格中提…

    2023年10月22日
    00
  • 使用Python和Selenium爬取微博评论教程

    随着互联网的发展,数据获取和分析变得越来越重要。在社交媒体上,用户评论是宝贵的信息源,有助于了解用户的看法和情感。本教程将向您介绍如何使用Python和Selenium来爬取微博评论,以便进行分析和洞察。无论您是…

    2023年12月5日
    00
  • 如何使用Python爬取文章并转化为Word文档

    在某个午后,王大神坐在阳台的藤椅上,想着自己的AI技术博客已经很久没更新了。他想要一种方式,可以自动化地从互联网上获取文章,并保存成Word格式。于是,他动手编写了一个Python爬虫脚本,不仅可以爬取文章内容…

    2023年10月12日
    00
  • 如何使用Python爬取百度贴吧内容

    在今天的教程中,我将向您介绍如何使用Python编写一个简单的网络爬虫,用于从百度贴吧中获取帖子内容。这个教程将帮助您了解如何使用Python的requests库和BeautifulSoup库来获取网页内容,以及如何将爬取到的数据保…

    2023年11月26日
    00
  • 如何使用Python和Selenium爬取淘宝商品信息

    在数字化时代,电子商务已经成为我们购物的主要方式之一。淘宝作为中国最大的电子商务平台之一,拥有庞大的商品种类和丰富的商品信息。但是,如果你想要获取淘宝上的商品信息,手动复制粘贴可能会非常繁琐。因此,…

    2023年11月25日
    00
  • 如何使用Python爬取网页并保存为Word文档

    假设您是一位热衷于收集好文章的人,每天都希望能够快速获取优质文章并保存在本地,以备离线阅读。但是,手动复制粘贴文章内容并保存为Word文档是一项繁琐的任务,特别是当您需要获取大量文章时。在这篇教程中,我…

    2023年10月8日
    00
  • 手把手教程:使用Python爬取Bilibili视频

    在现代社交媒体和视频分享平台的时代,Bilibili(哔哩哔哩)已经成为了许多人追逐知识、娱乐和创意的宝库。Bilibili上有各种各样的视频内容,从知识分享到娱乐节目,应有尽有。你可能会想,是否有一种方法可以将自…

    2023年12月26日
    00
  • Python爬虫教程:批量下载论文模板

    在现代学术研究和论文写作中,寻找合适的论文模板是非常重要的一步。然而,要手动一篇一篇地下载这些模板费时费力。本教程将向您展示如何使用Python编写一个简单而强大的爬虫,自动批量下载论文模板,让您的学术研…

    2023年12月10日
    00