python - Python Selenium:单击网站表格中的每条记录后如何抓取结果
问题描述
该网站有一个表格,其中包含多个可以单击的元素。
每次点击都会将我引导到一个单独的页面,该页面显示相应元素的其他表格结果。
我想在 Python 中使用 Selenium 抓取所有这些元素的表结果(也使用 BeautifulSoup 来解析 html 数据)。
以下是我当前的代码:
for i in range(table_pd2.shape[0]):
driver.find_element_by_link_text(table_pd2[0][i]).click()
driver.switch_to.window(driver.window_handles[1])
bs = BeautifulSoup(driver.page_source, 'html.parser')
table = bs.find_all('table', id='xxx')
table_pd = pd.read_html(str(table))
table_pd = table_pd[0]
driver.close()
driver.switch_to.window(driver.window_handles[0])
以下是我的逻辑:
- table_pd2:我创建的熊猫系列,包括所有元素的文本
- 在 for 循环中:
- 在网站上找到并单击表格中的每个元素
- 切换到包含其他表格结果的弹出页面
- 获取表结果并将它们存储在名为 table_pd 的 pandas df 中
- 关闭当前页面并切换回原页面点击下一项
问题: - 每次单击后如何将每个结果保存在 table_pd 中?如何将所有 table_pd 组合成一个大熊猫数据框?
请推荐,谢谢!
解决方案
在下面试试这个。
all_df = pd.DataFrame() #<====== created over all df
for i in range(table_pd2.shape[0]):
driver.find_element_by_link_text(table_pd2[0][i]).click()
driver.switch_to.window(driver.window_handles[1])
bs = BeautifulSoup(driver.page_source, 'html.parser')
table = bs.find_all('table', id='xxx')
table_pd = pd.read_html(str(table))
table_pd = table_pd[0]
all_df.append(table_pd) #<====== appending to over all df
driver.close()
driver.switch_to.window(driver.window_handles[0])
推荐阅读
- postgresql - 如何缩小一组 Postgres 行的范围,其中的值最接近特定值?
- hadoop - 如何从本地浏览器连接到谷歌云平台的外部IP
- excel - 使用串联重命名文件名
- python - 在 numpy 中如何在内部转换值
- vba - 多行文本框将第一行设置为粗体
- asp.net - 更新面板不起作用:接收错误:“响应”不是有效的脚本名称。名称必须以“.js”结尾
- c# - 将 Appium 测试结果记录到控制台
- python - 有没有办法置换矩阵的子集?
- java - 使用 AJAX 在按钮单击事件后重新加载检票口组件
- laravel - 如何使用 Laravel 自定义包,称为 laravel-users?