python+selenium获取分页表格数据并导入excel中

1.准备工作:
安装环境:python3,selenium库,xlsxwriter库,chorme浏览器,chormedriver(具体安装步骤自行百度)
2.开始编写代码
首先导入我们必须要的库:

from selenium import webdriver
import xlsxwriter
from selenium.webdriver.common.keys import Keys

接着编写一个打开网址的方法:

def OpenChorme(url):
    chorm_drive = r'E:\python\chromedriver.exe' # 此处是我chormedriver放的位置
    driver = webdriver.Chrome(executable_path=chorm_drive)
    driver.get(url) # url你选择要打开的网址
    return driver

我要打开的一个网站是我们这里内网的一个网址,就不给出来了。我们要抓取网站上的表格数据如下图:在这里插入图片描述
通过chorme的开发者工具,我们可以定位到该table标签的 id 为 list在这里插入图片描述然后再查看其包含的子标签tbody>tr在这里插入图片描述
其中,每一行tr标签又包含列td在这里插入图片描述每一行tr标签里的子标签td就包含着我们需要抓取的数据,那么我们就可以通过selenium的定位方法去定位标签,获取标签里的数据。
接下来,我们写一个获取所有表格数据的方法:

def find_all_data(driver):
    dat = []
    lst = []
    # 通过css选择器找到table的位置
    element = driver.find_element_by_css_selector('#list')
    # 找到所有table下面所有的tr
     tr_contents = element.find_elements_by_tag_name('tr')
     for tr in tr_contents:
     	 # 遍历查找每个tr下面的td
         for td in tr.find_elements_by_tag_name('td'):
         	 # 将每个td的内容存储到lst中
             lst.append(td.text)
         dat.append(lst)
         lst = []
    return dat

上面的代码我们只获取到了当页的数据我们要获取分页的数据,那么就应该为上段代码做些修改。
在这里插入图片描述通过调试工具我们得到了页码输入框的位置,在这里,该input框没有id,因此我们可以通过它的XPath来定位标签,我们在控制台选中该标签后,鼠标单击右键,然后选中 copy->copy XPath。就可以得到了,下一步修改find_all_data()方法。

# page:总共有多少页
def find_all_data(driver,page):
    dat = []
    lst = []
    for i in range(1, page + 1):
    	# 获取分页输入框标签的定位
        inputpage = driver.find_element_by_xpath("//*[@id='pager_center']/table/tbody/tr/td[2]/input")
        # 首先清除输入框里面的数字
        inputpage.clear()
        # 然后发送页码,我们为了方便,就把第一页也写在了里面
        inputpage.send_keys(str(i))
        # 最后模拟键盘点击Enter键
        inputpage.send_keys(Keys.ENTER)
        # 为了是数据刷新出来,做了一个小小的死延时处理
        time.sleep(3)
        element = driver.find_element_by_css_selector('#list')
        tr_contents = element.find_elements_by_tag_name('tr')
        for tr in tr_contents:
            for td in tr.find_elements_by_tag_name('td'):
                lst.append(td.text)
            dat.append(lst)
            lst = []
    return dat

最后写一个main函数测试一下:

if __name__ == '__main__':
    driver = OpenChorme('此处为你自己的网址')
    # 不用管,这是我登录输入账号、密码和验证码的过程
    local = (656, 346, 765, 385)
    # 登录方法
    Login_succ(driver,'admin','admin',local)
    time.sleep(5)
    # 获取到前三页的数据
    lst = find_all_data(driver,3)
    time.sleep(2)
    driver.close()
    # 创建一个表格
    workbook = xlsxwriter.Workbook('D:/Demo1.xlsx')
    # 添加一个sheet
    worksheet = workbook.add_worksheet()
    # 获取表格的行、列
    coloum = len(lst)
    row = len(lst[0])
    print(coloum,row)
    for i in range(0,coloum):
        for j in range(0,row):
            text = lst[i][j]
            # 循环写入表格内
            worksheet.write(i,j,text)
    workbook.close()

结果如下:

  • 6
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值