面对问题,同时使用python和selenium从表中刮擦数据



我已经使用Python与Selenium编写了一个脚本,从目标页面上解析了该脚本,可以按照我尝试在下面进行描述的一些步骤来伸出手,以确保这一点。它确实到达了目的地,但是在从该表中刮擦数据时,它会在控制台"无法找到元素"中显示错误。我尝试使用在线XPATH测试仪查看是否错误,但我发现我在脚本中使用的XPATH用于" TD_DATA"是正确的。我想,我在这里所缺少的是我的知识。希望有人可以研究它,并为我提供解决方法。顺便说一句,我的脚本中给出了网站链接。

链接以查看表的html内容:" https://www.dropbox.com/s/kaom5qzk78xndqn/partial html Content Content CONTEM20THE THE TTHEPER;

到达我脚本能够维护的目标页面的步骤:

  1. 选择"我已经阅读和理解上面"
  2. 将此关键字"泵"放在位于"选择医疗设备"下方的输入箱中。
  3. 选择"泵"的复选框"设备。
  4. 最后,按搜索按钮

到目前为止我尝试过的脚本:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('http://apps.tga.gov.au/Prod/devices/daen-entry.aspx')
driver.find_element_by_id('disclaimer-accept').click()
time.sleep(5)
driver.find_element_by_id('medicine-name').send_keys('pump')
time.sleep(8)
driver.find_element_by_id('medicines-header-text').click()
driver.find_element_by_id('submit-button').click()
time.sleep(7)
for item in driver.find_elements_by_xpath('//div[@class="table-responsive"]'):
    for tr_data in item.find_elements_by_xpath('.//tr'):
        td_data = tr_data.find_element_by_xpath('.//span[@class="hovertext"]//a')
        print(td_data.text)
driver.close()

为什么不这样做:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('http://apps.tga.gov.au/Prod/devices/daen-entry.aspx')
driver.find_element_by_id('disclaimer-accept').click()
time.sleep(5)
driver.find_element_by_id('medicine-name').send_keys('pump')
time.sleep(8)
driver.find_element_by_id('medicines-header-text').click()
driver.find_element_by_id('submit-button').click()
time.sleep(7)
for item in driver.find_elements_by_xpath(
'//table[@id]/tbody/tr/td[@class]/span[@class]/a[@id]'
):
    print(item.text)
driver.close()

输出:

27233
27283
27288
27289
27390
27413
27441
27520
25445
27816
27866
27970
28033
28238
26999
28264
28407
28448
28437
28509
28524
28553
28647
28677
28646

也许您想考虑使用driver.page_source保存页面,拉出表,将其保存为HTML文件。然后使用html的熊猫将表打开到数据框中