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
投稿
猜你喜欢
- 示例.1import randomfrom random import shufflex = [[i] for i in range(10)
- The Only Thing We Have To Fear Is Premature Standardization原文地址:http:/
- 直接上图,图文并茂,相信你很快就知道要干什么。A文件:B文件:可以发现,A文件中“汉字井号”这一列和B文件中“WELL”这一列的属性相同,以
- 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi
- 首先让我们看下 YUI 是如何处理的:var toObject = function(a) { var o = {
- 前记上一遍文章《Python中Async语法协程的实现》介绍了Python是如何以生成器来实现协程的以及Python Asyncio通过Fu
- 前言在Django中有大量的通用类视图,例如ListView,DetailView,CreateView,UpdateView等等,将所有重
- 阅读《YUI学习笔记(1)》YAHOO.lang.dump 与 YAHOO.lang.substitute。1.&nbs
- 本文介绍在Anaconda环境下,安装Python中栅格、矢量等地理数据处理库GDAL的方法。需要注意的是,本文介绍基于conda inst
- JavaScript是一门OOP,而有些人说,JavaScript是基于对象的。1) 如何创建对象:1. 使用constructor,例如:
- 一、读写excel数据利用pandas可以很方便的读写excel数据1.1 读:data_in = pd.read_excel('M
- 我们平日办公时用得最多的软件是Execl、Word或WPS Office等,你的计算机中一定储存着大量的XLS、DOC、WPS文件吧!网页制
- 1.time.sleep(secs)参考文档原文:Suspend execution for the given number of sec
- 昨晚今晚写了两晚,总算把Py Port Scanner 写完了,姑且称之为0.1版本,算是一个Python多线程端口扫描工具。水平有限,实话
- 这篇文章主要介绍了基于python实现把图片转换成素描,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。以下文章来源于Python进击者 ,
- 1.主要功能如下:1.classification分类2.Regression回归3.Clustering聚类4.Dimensionalit
- 1、django搜索路径使用 import 语句时,Python 所查找的系统目录清单。查看方式:import sysprint
- 前言python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时
- 在《 详解Python拼接字符串的七种方式 》这篇文章里,我提到过,字符串是程序员离不开的事情。后来,我看到了一个英文版本的说法:There