我们利用模拟浏览器爬取一个网页上的表格,但是它有很多页,这就需要我们不断点击下一页来获取新的表格继续爬取。
如图所示,我们无法确定一个动态更新数据的表格的具体页数,因为他会随着数据变化而增加或减少。
a1 = driver.find_element_by_xpath('/html/body/div/div/div[2]/div/div[2]/nav/ul/li[last()-1]/a').text
a1 = int(str(a1))
上述代码用来获取当前页数数字,li[last()-1] 代表获取倒数第二个 li 标签,也就是上图中的‘91’这个数字,获取到了这个数字,写一个FOR循环来不断点击下一页,就可以实现分页爬取数据的效果。
第一步,先进入到有表格的网站,把初次显示的第一页表格爬取下来
driver.get('http://网站')
windows = driver.window_handles # 把新的页面赋值给windows
driver.switch_to.window(windows[-1]) # 把窗口windwos中的最后一个窗口为当前窗口
html = driver.page_source # 提取网页源码
df = pd.DataFrame()
#将第一页的表格爬取下来
df = df.append(pd.read_html(html), ignore_index=True)
第二部,就是刚刚我说的,获取最后一页的页码数,for循环点击下一页进行爬取
a1 = driver.find_element_by_xpath('/html/body/div/div/div[2]/div/div[2]/nav/ul/li[last()-1]/a').text
a1 = int(str(a1))
for i in range(1, a1):
driver.find_elements_by_class_name('a1')[1].click()
windows = driver.window_handles # 把新的页面赋值给windows
driver.switch_to.window(windows[-1]) # 把窗口windwos中的最后一个窗口为当前窗口
html = driver.page_source # 提取网页源码
df = df.append(pd.read_html(html), ignore_index=True)
最后一步,自定义表头导出excel文件
df.to_csv('d:/a11.csv', header=['仓库', '货位类型', '货位','sku','库存','创建时间','更新时间','相关批次','订单信息'], index=False)
导出文件如下: