3 回答

TA贡献1854条经验 获得超8个赞
结果是使用 javascript 加载的。您需要等到搜索结果加载完毕后再进行抓取。这是一个工作示例,
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup as soup
import time
url = 'https://locatr.cloudapps.cisco.com/WWChannels/LOCATR/openBasicSearch.do'
driver = webdriver.Chrome(executable_path='C:/Selenium/chromedriver.exe')
driver.get(url)
SearchString = 'CALIFORNIA'
Location = driver.find_element_by_name("location")
Location.send_keys(SearchString)
#search = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located(By.XPATH,"//li//span[contains(text(),'"+SearchString+"')]"))
#search.click()
time.sleep(3)
driver.find_element_by_xpath("//li//span[contains(text(),'"+SearchString+"')]").click()
driver.find_element_by_id("searchBtn").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,'searchResultsList')))
time.sleep(3)
page_soup = soup(driver.page_source, "html.parser")
print(page_soup.prettify())
containers = page_soup.findAll("div", class_="row ploc-l-row--gutterV flex-wrap flex-align-start flex-center-vertical")
print (len(containers))
driver.close()
结果是5

TA贡献1877条经验 获得超6个赞
仅供参考,该页面使用 jQuery,这使得这很容易:
driver.execute_script("return $('div[class=\"row ploc-l-row--gutterV flex-wrap flex-align-start flex-center-vertical\"]').length")

TA贡献1796条经验 获得超10个赞
根据您的评论澄清,我检索了搜索结果中显示的每个合作伙伴的合作伙伴名称:
使用 BeautifulSoup 语法:
partnerWebElements = page_soup.findAll(title="View Profile")
仅使用 Selenium 语法:
partnerWebElements = driver.find_elements_by_xpath("//a[@title='View Profile']")
然后,您可以获得每个合作伙伴名称的文本,如下所示:
for partnerWebElement in partnerWebElements: print(partnerWebElement.text);
添加回答
举报