如何通过循环搜索字段并在python中的数据集中附加输出来解析数据?

问题描述

我的问题与上一个问题有关:How to parse several attributes of website with same class name in python?

我想将解析包含在 cap 上的循环中,并将解析的结果文本附加到循环末尾的向量或数据集中,然后在顶部继续。

我的循环现在看起来像这样:

driver = webdriver.Chrome('pathtochrome/chromedriver.exe')
caps = ['11100']
for cap in caps:
   driver.get("https://www.conad.it/")
   webdriverwait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[@href='javascript:void(0)']"))).click() # accept the cookies
   webdriverwait(driver,"//input[@id='location-input']"))).send_keys(caps)
   webdriverwait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//input[@class = 'btn btn-default btn-lg btn-block']"))).find_element_by_xpath("//input[@class = 'btn btn-default btn-lg btn-block']").click()
   #webdriverwait(driver,20).until(EC.element_to_be_clickable(driver.find_element_by_xpath("//input[@class = 'btn btn-default btn-lg btn-block']").click()
   print([item.text for item in webdriverwait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,"//div[contains(@class,'col-md-8')]//p")))])

注释掉的行只是另一种尝试。在我的两次尝试中,当我在循环中包含 .click() 命令行时,CAP 没有得到答复。

但是,如果我不循环,即:

driver = webdriver.Chrome('pathtochrome/chromedriver.exe')
driver.get("https://www.conad.it/")
webdriverwait(driver,"//a[@href='javascript:void(0)']"))).click() # accept the cookies
webdriverwait(driver,"//input[@id='location-input']"))).send_keys('11100')
driver.find_element_by_xpath("//input[@class = 'btn btn-default btn-lg btn-block']").click()
print([item.text for item in webdriverwait(driver,'col-md-8')]//p")))])

我想将结果写入数据集或向量中,然后将下一轮循环附加到它,就像这样,它应该将文本附加到通过键入 11100 或{{1} 找到的数据},但在键入 11020 时不应打印任何内容,因为此 11000 没有条目:

cap

感谢任何帮助!

解决方法

如果未找到项目,则使用 try..except 块然后继续循环。

caps = ['11000','11100','11020','13022']
data = []
driver.get("https://www.conad.it/")
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[@href='javascript:void(0)']"))).click() # accept the cookies
for cap in caps:
   driver.get("https://www.conad.it/")
   WebDriverWait(driver,"//input[@id='location-input']"))).clear()
   WebDriverWait(driver,"//input[@id='location-input']"))).send_keys(cap)
   WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input.btn.btn-default.btn-lg.btn-block"))).click()
   try:
      data.append([item.text for item in WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH,"//div[contains(@class,'col-md-8')]//p")))])

   except:
       print("no data found")
       continue

print(data)

输出:

[['Frazione Condemine 84,11010 Sarre','Grand Chemin C/c Centreville 3,11020 Saint-christophe',"Localita' Arensod 27,11010 Sarre"],['Grand Chemin C/c Centreville 3,"Localita' Perolle 21,11024 Chatillon",'Frazione Condemine 84,['Via Durio 26,13019 Varallo','Via Brigate Garibaldi 24/a,13019 Varallo']]