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()
结果如下: