python+selenium对table表和分页处理
作者:bulabula2022?? 发布时间:2024-01-04 02:16:18
标签:python,selenium,table表,分页
python+selenium编写实现爬虫过程:
1.爬虫循环处理table表,
2.table表分页处理,
3.网页table所有内容循环处理
4.获取隐藏的href超链接内容,
5.所有数据本地csv保存,
代码如下:
from selenium.webdriver.chrome.options import Options
import pandas as pd
import math
from selenium import webdriver
import time
# 配置chrome的参数
options = Options()
options.add_argument('--headless')
# options.add_experimental_option('excludeSwitches', ['enable-automation']) #避开验证码
# 获取一个浏览器对象
browser = webdriver.Chrome(chrome_options=options)
browser.get("C:\\Users\\XXXX\\XXXX.html")
# 打印整个表格信息
# print(browser.find_element_by_xpath("//*[@id=\"versions-bom-layout\"]/div/div[5]/div/div/div/div[1]/table/tbody").text)
data = [] # 建立空列表存储表格信息
# 获取总页数(通过二次定位方法进行定位)
# total_pages1 = len(browser.find_element_by_class_name("pagination").find_elements_by_tag_name("li")) - 2
# print("total_pages is %s" % (total_pages1))
# 共有多少个组件需要提取
total_num = \
browser.find_element_by_xpath("//*[@id=\"versions-bom-layout\"]/div/div[5]/div/div/div/div[1]/div").text.split(
'共')[1]
print(f'total_num====::::::::{total_num}')
total_pages = math.ceil(int(total_num) / 100) + 1 # 每页显示100个组件, 获取总页数
print(f'total_pages====::::::::{total_pages}')
time.sleep(10) #
# total_pages = len(browser.find_element_by_tag_name('select').find_element_by_tag_name('option'))
for i in range(1, total_pages): # page:总共有total_pages-1页
# # 获取分页输入框标签的定位
# inputpage = browser.find_element_by_xpath("//*[@id='pager_center']/table/tbody/tr/td[5]/input")
# # 首先清除输入框里面的数字
# inputpage.clear()
# # 然后发送页码,我们为了方便,就把第一页也写在了里面
# inputpage.send_keys(str(i))
# # 最后模拟键盘点击Enter键
# inputpage.send_keys(Keys.ENTER)
# # 为了是数据刷新出来,做了一个小小的死延时处理
time.sleep(10) # 让浏览器先加载一下动态页面
t_body = browser.find_element_by_tag_name('tbody') # 定位表格主体
tr_list = t_body.find_elements_by_tag_name('tr') # 定位表格每一行
numbers = len(tr_list)
print(f'tr_list[0].text===={tr_list[0].text}')
# for i in range(numbers):
for tr in tr_list:
td_list = tr.find_elements_by_tag_name('td') # 定位表格每个单元格
lst = [] # 建立空列表存储每行信息
for td in td_list:
# lst.append("B-momv2core-121-anyreport-BinaryScan") # 添加版本信息
lst.append(td.text) # 添加每个单元格的文本信息
href = td_list[4].find_element_by_tag_name('a').get_attribute("href") # 获当前行第5个td单元格的超链接
print(u"第n行第n列的text:", href)
lst.append(href) # print(u"第一行第二列的text:", href) # 添加文件链接
data.append(lst) # 添加每行信息
# 点击下一页逻辑判断
# 如果table只有1页,不作处理,直接退出循环
# 如果table只有2页,点击下一页处理条件(total_pages == 3 and i == 1)
# 如果table2页以上,点击下一页处理条件(total_pages > 3 and i < (total_pages - 1))
if total_pages == 3 and i == 1:
browser.find_element_by_xpath("//*[contains(text(),'下一页')]").click()
elif total_pages > 3 and i < (total_pages - 1):
browser.find_element_by_xpath("//*[contains(text(),'下一页')]").click()
df = pd.DataFrame(data,
columns=['选择', '策略', '审核', '版本组', '匹配数', '3', '4', '5', '6', '7', '8', '9', '10', '来源链接'])
df.to_csv('获取未知xxx.csv', encoding='utf_8_sig')
browser.quit()
效果图:
来源:https://blog.csdn.net/baidu_31295661/article/details/122512862
0
投稿
猜你喜欢
- 一、迭代器(Iterator)1.1 可迭代对象(Iterable)可迭代对象,可以简单理解为可遍历对象,即能够使用 for 循环遍历的对象
- 本文实例讲述了python+Django+apache的配置方法。分享给大家供大家参考,具体如下:下载安装xampp套件下载mod_pyth
- 更详细的信息可以去查msdn或者Navigator 2.0以后的说明文档,这里我们之做个简单的说明 包括一下几大属性: appCodeNam
- 代码如下:USE [tempdb] GO /****** Object: UserDefinedFunction [dbo].[fun_ge
- 关键术语介绍为了方便开源库的快速上手,我们先来了解 excel 中的几个关键术语,如下图所示,①为sheet,也就是表格中的页签;②为row
- 外网python2.7 虚拟环境中安装了 flask 模块,期望在内网使用,如何迁移外网的虚拟环境到内网呢?1 进入外网python虚拟环境
- 点击按钮,出现半透明遮罩层弹框,说说自己之前发过的愁吧1、遮罩层半透明了 弹框也跟着半透明了 就像这样 绝望吧 是哪里错了呢?你的
- 在最近的一个项目需要实现在MySQL单表多关键字模糊查询,但这数个关键字并不一定都存在于某个字段。例如现有table表,其中有title,t
- 我就废话不多说了,还是直接看代码吧!from time import ctimeimport threadingimport timedef
- 来看看javascript怎么实现自动点击超级链接吧,主要使用了js中的onclick事件。这里推荐大家看看这篇文章js鼠标事件大全。看了这
- 环境搭建1.安装uwsgi、nginx和djangoapt install nginxpip install uwsgipip instal
- 今天做项目时,有一个这样的需求,需要动态删除的Tab,比如:可以删除某一个,可以删除多个。每一个Tab对应一个iframe。本来我的代码是这
- 本文实例讲述了Python读写ini文件的方法。分享给大家供大家参考。具体如下:比如有一个文件update.ini,里面有这些内容:[ZIP
- SQL Server Sa用户相信大家都有一定的理解,下面就为您介绍SQL Server 2000身份验证模式的修改方法及SQL Serve
- 今天要处理通知书上的日期,写的一个处理程序,效率可能不是最优的,不过实现功能绝对没问题。注:月份和天要分>10,=10,<10三
- 1.使用Qt Design设计一个空白窗口(注意:我是使用MainWindow创建的窗口)2.使用PyUIC将.ui文件转换成.py文件右键
- 背景介绍最近在设计数据库的时候因为开始考虑不周,所以产生了大量的重复数据。现在需要把这些重复的数据删除掉,使用到的语句就是Group By来
- 周末在家,儿子闹着要玩游戏,让玩吧,不利于健康,不让玩吧,扛不住他折腾,于是想,不如一起搞个小游戏玩玩!之前给他编过猜数字 和 掷骰子 游戏
- CSSer与其他IT职位一样,在找工作的时候,都会面临着面试官提出的问题,或者给出的试卷。一、超链接点击过后hover样式就不出现的问题?被
- 官网文档http://www.yiiframework.com/doc-2.0/guide-structure-assets.htmlyii