python+selenium对table表和分页处理
作者:bulabula2022?? 时间:2024-01-04 02:16:18
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
标签:python,selenium,table表,分页
0
投稿
猜你喜欢
python发送邮件脚本
2022-01-28 03:04:58
python进行TCP端口扫描的实现
2021-04-18 12:33:32
Pytorch卷积层手动初始化权值的实例
2023-08-02 15:38:23
MySQL数据库Shell import_table数据导入
2024-01-15 02:34:55
python实现的简单窗口倒计时界面实例
2023-06-18 23:02:55
css网页下拉菜单制作方法(3):样式修饰
2007-02-03 11:39:00
Python+folium绘制精美地图的示例详解
2023-07-26 13:17:06
Nodejs之TCP服务端与客户端聊天程序详解
2024-05-03 15:55:48
pyqt5 键盘监听按下enter 就登陆的实例
2022-03-04 08:12:31
使用Python制作一个简易的远控终端
2022-03-29 21:04:12
又一款MVVM组件 构建自己的Vue组件(2)
2024-04-30 10:46:40
Codeigniter发送邮件的方法
2023-11-15 05:08:25
selenium+python自动化78-autoit参数化与批量上传功能的实现
2023-11-02 01:24:57
python中PyQuery库用法分享
2023-12-05 03:08:31
python类的继承实例详解
2021-04-10 07:22:33
pip指定python位置安装软件包的方法
2023-07-13 10:29:47
MySQL存储过程例子(包含事务,输出参数,嵌套调用)
2024-01-17 06:21:54
GoFrame glist 基础使用和自定义遍历
2024-05-28 15:23:26
python中如何使用正则表达式的非贪婪模式示例
2022-08-28 08:43:49
python机器学习库常用汇总
2022-05-17 11:55:20