首页 > 编程语言 > python+playwright 学习-67 抓取 table 表格数据

python+playwright 学习-67 抓取 table 表格数据

时间:2023-07-23 10:55:45浏览次数:56  
标签:67 11 playwright 07 python py xx 2023 debugtalk

前言

最近有小伙伴提到如何抓取 table 表格上的数据,table表格的数据很简单,就是行和列。
可以按行抓取,也可以按列抓取。

获取table 某一列的数据

抓取第3列(项目名称)所有数据

定位方式

$x('//table/tbody/tr/td[3]')

于是可以看到当前页面的第3列数据被全部定位到

接下来就可以根据定位的元素获取全部文本

    # 抓取table表格数据
    all_names = page.locator('//table/tbody/tr/td[3]')
    all_text = [item.inner_text() for item in all_names.all()]
    print(all_text)

打印结果

['95486441c9474a13af3c9b499', '11a925e6be6d4730803d16326', 'sdf', '智能语音交互平台1', '智能语音交互平台', 'af192f498ddc456b8ec7a8d9c', '9bbfa2e6cb65447082070c692', '1234', 'fa021c54fa92423fa9fd790c0', 'c401881da9244fe0bba884e86', '9a32fe638eb441beb74ba186f', '56d6bd63ec3449c898de56644', '326724fd85c744fdb7720af4b', '5ec8d9d8f8684245ac82e0f9f', 'c6a18619c7db4ac499c1ed5e3']

按行获取table表格全部数据

定位标题行

//table/thead/tr/th

定位他body数据行

//table/tbody/tr

按行抓取table表格数据,并且按标题以键值对方式存储数据

    table_all_data = []
    # 获取全部标题
    all_titles = page.locator('//table/thead/tr/th')
    titles_text = [item.inner_text() for item in all_titles.all()]
    print(f'全部标题:{titles_text}')

    all_tr = page.locator('//table/tbody/tr')
    print(f"当前页面数量:{all_tr.count()}")
    for i in range(all_tr.count()):
        td_element = all_tr.all()[i].locator('td').all()
        td_text = [item.inner_text() for item in td_element]
        print(f"第 {i} 行数据:{td_text}")
        table_all_data.append({key: value for key, value in zip(titles_text, td_text)})
    # 当前页全部数据
    print(table_all_data)

运行结果

全部标题:['', 'ID', '项目名称', '所属应用', 'DebugTalk', '测试人员', '创建时间', '创建时间', '操作']
当前页面数量:15
第 0 行数据:['', '912', '95486441c9474a13af3c9b499', 'xx', 'debugtalk.py', 'test', '2023-07-13 22:40:19', '2023-07-13 22:40:19', '']
第 1 行数据:['', '911', '11a925e6be6d4730803d16326', 'xx', 'debugtalk.py', 'test', '2023-07-12 23:19:08', '2023-07-12 23:19:08', '']
第 2 行数据:['', '910', 'sdf', 'sfsfdsdfdsf', 'debugtalk.py', 'test', '2023-07-12 22:59:05', '2023-07-12 22:59:05', '']
第 3 行数据:['', '909', '智能语音交互平台1', '智能语音交互平台web端', 'debugtalk.py', 'test', '2023-07-12 20:51:52', '2023-07-12 20:51:52', '']
第 4 行数据:['', '908', '智能语音交互平台', '智能语音交互平台web端', 'debugtalk.py', 'test', '2023-07-12 20:50:44', '2023-07-12 20:50:44', '']
第 5 行数据:['', '907', 'af192f498ddc456b8ec7a8d9c', 'xx', 'debugtalk.py', 'yoyo', '2023-07-11 11:46:33', '2023-07-11 11:46:33', '']
第 6 行数据:['', '906', '9bbfa2e6cb65447082070c692', 'xx', 'debugtalk.py', 'yoyo', '2023-07-11 11:45:21', '2023-07-11 11:45:21', '']
第 7 行数据:['', '905', '1234', '1234', 'debugtalk.py', 'yoyo', '2023-07-07 18:57:24', '2023-07-11 11:40:11', '']
第 8 行数据:['', '904', 'fa021c54fa92423fa9fd790c0', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:57:08', '2023-07-07 18:57:08', '']
第 9 行数据:['', '903', 'c401881da9244fe0bba884e86', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:54:35', '2023-07-07 18:54:35', '']
第 10 行数据:['', '902', '9a32fe638eb441beb74ba186f', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:52:11', '2023-07-07 18:52:11', '']
第 11 行数据:['', '901', '56d6bd63ec3449c898de56644', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:49:36', '2023-07-07 18:49:36', '']
第 12 行数据:['', '900', '326724fd85c744fdb7720af4b', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:48:54', '2023-07-07 18:48:54', '']
第 13 行数据:['', '899', '5ec8d9d8f8684245ac82e0f9f', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:47:27', '2023-07-07 18:47:27', '']
第 14 行数据:['', '898', 'c6a18619c7db4ac499c1ed5e3', 'xx', 'debugtalk.py', 'yoyo', '2023-07-07 18:46:07', '2023-07-07 18:46:07', '']
[{'': '', 'ID': '912', '项目名称': '95486441c9474a13af3c9b499', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'test', '创建时间': '2023-07-13 22:40:19', '操作': ''}, {'': '', 'ID': '911', '项目名称': '11a925e6be6d4730803d16326', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'test', '创建时间': '2023-07-12 23:19:08', '操作': ''}, {'': '', 'ID': '910', '项目名称': 'sdf', '所属应用': 'sfsfdsdfdsf', 'DebugTalk': 'debugtalk.py', '测试人员': 'test', '创建时间': '2023-07-12 22:59:05', '操作': ''}, {'': '', 'ID': '909', '项目名称': '智能语音交互平台1', '所属应用': '智能语音交互平台web端', 'DebugTalk': 'debugtalk.py', '测试人员': 'test', '创建时间': '2023-07-12 20:51:52', '操作': ''}, {'': '', 'ID': '908', '项目名称': '智能语音交互平台', '所属应用': '智能语音交互平台web端', 'DebugTalk': 'debugtalk.py', '测试人员': 'test', '创建时间': '2023-07-12 20:50:44', '操作': ''}, {'': '', 'ID': '907', '项目名称': 'af192f498ddc456b8ec7a8d9c', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-11 11:46:33', '操作': ''}, {'': '', 'ID': '906', '项目名称': '9bbfa2e6cb65447082070c692', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-11 11:45:21', '操作': ''}, {'': '', 'ID': '905', '项目名称': '1234', '所属应用': '1234', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-11 11:40:11', '操作': ''}, {'': '', 'ID': '904', '项目名称': 'fa021c54fa92423fa9fd790c0', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:57:08', '操作': ''}, {'': '', 'ID': '903', '项目名称': 'c401881da9244fe0bba884e86', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:54:35', '操作': ''}, {'': '', 'ID': '902', '项目名称': '9a32fe638eb441beb74ba186f', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:52:11', '操作': ''}, {'': '', 'ID': '901', '项目名称': '56d6bd63ec3449c898de56644', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:49:36', '操作': ''}, {'': '', 'ID': '900', '项目名称': '326724fd85c744fdb7720af4b', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:48:54', '操作': ''}, {'': '', 'ID': '899', '项目名称': '5ec8d9d8f8684245ac82e0f9f', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:47:27', '操作': ''}, {'': '', 'ID': '898', '项目名称': 'c6a18619c7db4ac499c1ed5e3', '所属应用': 'xx', 'DebugTalk': 'debugtalk.py', '测试人员': 'yoyo', '创建时间': '2023-07-07 18:46:07', '操作': ''}]

继续抓取后面的页面数据,只需点下一页按钮,做个循环

这样就可以批量抓取了。

标签:67,11,playwright,07,python,py,xx,2023,debugtalk
From: https://www.cnblogs.com/yoyoketang/p/17574772.html

相关文章

  • python 输入n行字符串
    如何实现Python输入n行字符串流程概述下面是实现Python输入n行字符串的一般流程:步骤描述1获取用户输入的行数n2创建一个空列表lines来存储字符串3使用循环n次,每次获取用户输入的字符串,并将其添加到lines列表中4最终得到的lines列表包含了用户输入的n行字......
  • python 循环往两个占位符
    Python循环往两个占位符循环是编程中常用的一种控制结构,它允许我们重复执行一段代码,达到简化代码和提高效率的目的。Python是一种高级编程语言,提供了多种循环结构,其中包括通过占位符循环的方法。在本文中,我们将介绍如何使用Python中的循环来填充两个占位符。什么是占位符?在......
  • python 输出为npy文件
    如何将Python输出为npy文件作为一名经验丰富的开发者,我很高兴能够教会你如何将Python的输出保存为npy文件。在本文中,我将为你详细介绍整个流程,并提供每一步所需的代码以及注释其意义。1.导入所需的库在开始之前,我们需要导入numpy库,因为它提供了将数据保存为npy文件的功能。imp......
  • python 使用Queue需要引入哪个包
    Python中使用Queue需要引入哪个包在Python中,如果我们想要使用队列(Queue)数据结构,我们需要引入queue模块。queue模块提供了实现各种队列类型的类,包括FIFO(先进先出)队列、LIFO(后进先出)队列和优先级队列等。通过引入queue模块,我们可以很方便地在我们的代码中使用队列。引入队列模块首......
  • python 循环list
    Python循环列表解析在Python编程中,循环是一种重要的控制结构。循环使我们能够重复执行一段代码,以便在处理大量数据或需要重复操作时提高效率。Python提供了多种循环结构,其中最常用的是for和while循环。本文将重点介绍如何使用循环来处理列表数据。列表简介在了解如何循环列表之......
  • python 判断变量是否是bytes
    Python判断变量是否是bytes概述在Python中,判断变量是否是bytes类型可以通过一系列步骤来实现。本文将介绍这个过程,并提供相应的示例代码。步骤下面是判断变量是否是bytes类型的流程图:步骤描述步骤1检查变量是否是bytes类型步骤2如果是bytes类型,则变量是bytes......
  • python 实现队列
    Python实现队列引言在计算机科学中,队列是一种常见的数据结构,用于存储和管理元素。队列采用先进先出(FIFO)的原则,即最先进入队列的元素最先被处理。在Python中,可以使用列表和相关的操作来实现队列。本文将介绍如何使用Python实现队列,并提供详细的代码示例和解释。实现步骤下表展......
  • [oeasy]python0074[专业选修]字节序_byte_order_struct_pack_大端序_小端序
    进制转化回忆上次内容上次总结了计算字符串值的函数eval 四种进制的转化函数binoctinthex  函数名前缀目标字符串所用进制bin0b二进制oct0o八进制hex0x十六进......
  • python: emailhelper
     """python发送邮件,用授权码"""importsmtplibfromemail.mime.textimportMIMETextdefsend():"""发送邮件:return:"""try:stmpserver163='smtp.163.com'......
  • Python报错 | AttributeError: 'NoneType' object has no attribute 'group'
    报错信息使用Python正则匹配的时候,报如下错误:AttributeError:'NoneType'objecthasnoattribute'group'错误原因报错翻译过来是:属性错误:“NoneType”对象没有属性“group”没有匹配到符合正则表达式的内容,但又调用了group方法。importrestr='hellopython!!!hel......