Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Selenium Python从网站中提取产品标题_Selenium_Xpath_Web Scraping_Css Selectors_Webdriverwait - Fatal编程技术网

如何使用Selenium Python从网站中提取产品标题

如何使用Selenium Python从网站中提取产品标题,selenium,xpath,web-scraping,css-selectors,webdriverwait,Selenium,Xpath,Web Scraping,Css Selectors,Webdriverwait,我试图从一个网站上刮取标题,但它只返回1个标题。我怎样才能得到所有的头衔 下面是我尝试使用xpath获取的元素之一(以开头): 输出: UNDERCOVER x Nike SFB Mountain Pack有发布日期 我期待更多的标题,但只返回一个结果。如果定位器找到多个元素,则find\u elemnt返回第一个元素查找元素返回定位器找到的所有元素的列表。 然后可以迭代列表并获取所有元素 如果您试图查找的所有元素都有类邮箱,则可以按类名查找元素。如果定位器找到多个元素,则查找元素返回第一个元素

我试图从一个网站上刮取标题,但它只返回1个标题。我怎样才能得到所有的头衔

下面是我尝试使用xpath获取的元素之一(以开头):

输出:
UNDERCOVER x Nike SFB Mountain Pack有发布日期


我期待更多的标题,但只返回一个结果。

如果定位器找到多个元素,则
find\u elemnt
返回第一个元素<代码>查找元素返回定位器找到的所有元素的列表。
然后可以迭代列表并获取所有元素


如果您试图查找的所有元素都有类
邮箱
,则可以按类名查找元素。

如果定位器找到多个元素,则
查找元素
返回第一个元素<代码>查找元素返回定位器找到的所有元素的列表。
然后可以迭代列表并获取所有元素

如果您试图查找的所有元素都有类
邮箱
,则您可以按类名查找元素。

要从中提取产品标题,因为所需元素是已启用的元素,您需要诱导WebDriverWait以查看所有元素()您可以使用以下任一选项:

  • XPATH

    driver.get('https://hypebeast.com/search?s=nike+undercover')
    print([element.text for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//h2/span")))])
    
  • CSS\u选择器

    driver.get('https://hypebeast.com/search?s=nike+undercover')
    print([element.text for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "h2>span")))])
    
  • 控制台输出:

    ['The UNDERCOVER x Nike SFB Mountain Pack Gets a Release Date', 'The UNDERCOVER x Nike SFB Mountain Surfaces in "Dark Obsidian/University Red"', 'A First Look at UNDERCOVER’s Nike SFB Mountain Collaboration', "Here's Where to Buy the UNDERCOVER x Gyakusou Nike Running Models", 'Take Another Look at the Upcoming UNDERCOVER x Nike Daybreak', "Take an Official Look at GYAKUSOU's SS19 Footwear and Apparel Range", 'UNDERCOVER x Nike Daybreak Expected to Hit Shelves This Summer', "The 10 Best Sneakers From Paris Fashion Week's FW19 Runways", "UNDERCOVER FW19 Debuts 'A Clockwork Orange' Theme, Nike & Valentino Collabs", 'These Are the Best Sneakers of 2018']
    
要从中提取产品标题,因为所需的元素是启用的元素,您需要诱导WebDriverWait,以实现所有元素的可见性(),并且您可以使用以下任一选项:

  • XPATH

    driver.get('https://hypebeast.com/search?s=nike+undercover')
    print([element.text for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.XPATH, "//h2/span")))])
    
  • CSS\u选择器

    driver.get('https://hypebeast.com/search?s=nike+undercover')
    print([element.text for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "h2>span")))])
    
  • 控制台输出:

    ['The UNDERCOVER x Nike SFB Mountain Pack Gets a Release Date', 'The UNDERCOVER x Nike SFB Mountain Surfaces in "Dark Obsidian/University Red"', 'A First Look at UNDERCOVER’s Nike SFB Mountain Collaboration', "Here's Where to Buy the UNDERCOVER x Gyakusou Nike Running Models", 'Take Another Look at the Upcoming UNDERCOVER x Nike Daybreak', "Take an Official Look at GYAKUSOU's SS19 Footwear and Apparel Range", 'UNDERCOVER x Nike Daybreak Expected to Hit Shelves This Summer', "The 10 Best Sneakers From Paris Fashion Week's FW19 Runways", "UNDERCOVER FW19 Debuts 'A Clockwork Orange' Theme, Nike & Valentino Collabs", 'These Are the Best Sneakers of 2018']
    

    • 你不需要硒。您可以使用更快的
      请求
      ,并以
      数据标题
      属性为目标

      import requests
      from bs4 import BeautifulSoup as bs
      
      r = requests.get('https://hypebeast.com/search?s=nike+undercover')
      soup = bs(r.content, 'lxml')
      titles = [item['data-title'] for item in soup.select('[data-title]')]
      print(titles)
      
      如果您确实想要selenium,那么匹配语法是

      from selenium import webdriver
      driver = webdriver.Chrome()
      driver.get('https://hypebeast.com/search?s=nike+undercover')
      titles = [item.get_attribute('data-title') for item in driver.find_elements_by_css_selector('[data-title]')]
      print(titles)   
      

      你不需要硒。您可以使用更快的
      请求
      ,并以
      数据标题
      属性为目标

      import requests
      from bs4 import BeautifulSoup as bs
      
      r = requests.get('https://hypebeast.com/search?s=nike+undercover')
      soup = bs(r.content, 'lxml')
      titles = [item['data-title'] for item in soup.select('[data-title]')]
      print(titles)
      
      如果您确实想要selenium,那么匹配语法是

      from selenium import webdriver
      driver = webdriver.Chrome()
      driver.get('https://hypebeast.com/search?s=nike+undercover')
      titles = [item.get_attribute('data-title') for item in driver.find_elements_by_css_selector('[data-title]')]
      print(titles)   
      

      分享我的经验和我所用过的东西,可能会对某人有所帮助。就用,

      element.get_attribute('ATTRIBUTE-NAME')
      

      分享我的经验和我所用过的东西,可能会对某人有所帮助。就用,

      element.get_attribute('ATTRIBUTE-NAME')
      

      您需要多个
      查找元素
      ,而不是单个
      查找元素
      您需要多个
      查找元素
      ,而不是单个
      查找元素
      谢谢Debanjan提供答案。你的回答是唯一对我有用的。对于访问该线程的任何人,我尝试使用
      find_elements
      ,但由于抛出错误而失败
      未找到任何属性
      我仍然是该领域的新手,因此我需要找出在这种特殊情况下
      elements
      不起作用的原因。@你知道答案吗?我已经逐字更新了我的答案。由于所需元素是启用元素,因此您必须为所有元素的可见性引入WebDriverWait()as
      find_元素
      单独返回0elements@DebanjanB-谢谢你提供更多的细节,这当然有助于我了解更多,并防止重复的问题。谢谢德班詹提供的答案。你的回答是唯一对我有用的。对于访问该线程的任何人,我尝试使用
      find_elements
      ,但由于抛出错误而失败
      未找到任何属性
      我仍然是该领域的新手,因此我需要找出在这种特殊情况下
      elements
      不起作用的原因。@你知道答案吗?我已经逐字更新了我的答案。由于所需元素是启用元素,因此您必须为所有元素的可见性引入WebDriverWait()as
      find_元素
      单独返回0elements@DebanjanB-感谢您提供更多的详细信息,这当然有助于我了解更多信息并防止重复问题。这个答案有什么不适用?你收到错误消息了吗?我两个都试过了。这个答案有什么不起作用?你收到错误消息了吗?我两个都试过了。