Python Selenium:点击网站上表格中的每条记录后如何抓取结果

时间:2019-05-29 01:58:18

标签: python pandas selenium selenium-webdriver

网站上有一个表格,其中包含多个可以单击的元素。

每次单击都会将我定向到一个单独的页面,显示相应元素的其他表结果。

我想在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的熊猫df中
    • 关闭当前页面并切换回原始页面以单击 下一项

问题: -每次单击后如何将每个结果保存在table_pd中?如何将所有table_pd合并到一个大熊猫数据框中?

请提出建议,谢谢!

1 个答案:

答案 0 :(得分:0)

在下面尝试这个。

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])