【问题标题】:How to scrape data from an anchor tag, which is inside another anchor tag in selenium python如何从锚标签中抓取数据,该标签位于 selenium python 中的另一个锚标签内
【发布时间】:2020-08-14 15:11:30
【问题描述】:

我正在使用 python 和 selenium web 驱动程序从动态站点中抓取数据。

如何抓取嵌套锚标签内的元素的href?

<h3 class="">
    <a href="some link/">Ultimate Content Writing</a>
</h3>

本站有很多上述类型的h3锚标签的链接,都是要刮掉的。我使用代码捕获了所有这些锚标记,

links = driver.find_elements_by_tag_name("h3")

然后我做到了,

for link in links:
    href = driver.find_element_by_link_text(link.text).get_attribute('href')

其中包含不需要的操作并减慢我的程序。

如何更有效地获取每个链接的href?

【问题讨论】:

  • 我不是专家,但有一个find_elements_by_css_selector 方法,因此您可以使用links = driver.find_elements_by_css_selector('h3&gt;a') 之类的方法来查找h3 标题中包含的所有链接。
  • 你能分享一下你期望得到什么和当前输出的例子吗?
  • 感谢@pawel,您的回复如此迅速。这帮我解决了。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

href 属性不在&lt;h3&gt; 标签内,而是在&lt;a&gt; 标签内。因此,您可以使用以下任一Locator Strategies,而不是find_elements_by_tag_name("h3")

  • 使用css_selector

    print(driver.find_elements_by_css_selector("h3>a").get_attribute("href"))
    
  • 使用xpath

    print(driver.find_elements_by_xpath("//h3/a").get_attribute("href"))
    
  • 使用CSS_SELECTORget_attribute("innerHTML")

    print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "h3>a")))])
    
  • 使用XPATHtext属性:

    print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//h3/a")))])
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

【讨论】:

  • 感谢您的回复。 CSS 选择器完成了这项工作。但是,不能使用 XPATH,因为它是一个动态站点,每次刷新时 XPath 都会改变。
猜你喜欢
  • 1970-01-01
  • 2013-07-26
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2019-06-09
  • 1970-01-01
相关资源
最近更新 更多