从网站中提取超链接 - Selenium

时间:2021-07-13 17:07:46

标签: python selenium web-scraping

在打开这个问题之前,我试图解决这个问题一段时间,并尝试在这里发布多个解决方案。

我目前正在尝试使用以下代码运行 scraper

website = 'https://www.abitareco.it/nuove-costruzioni-milano.html'
path = Path().joinpath('util', 'chromedriver')
driver = webdriver.Chrome(path)
driver.get(website)

main = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "p1")))

我的目标超链接中有 scheda 字样:

i = driver.find_element_by_xpath('.//a[contains(@href, "scheda")]')
i.text

我的第一个问题是 find_element_by_xpath 只输出一个超链接,第二个问题是它目前没有提取任何内容。

希望得到任何帮助和/或指导。

2 个答案:

答案 0 :(得分:1)

您需要改用 find_elements

for name in driver.find_elements(By.XPATH, ".//a[contains(@href, 'scheda')]"):
    print(name.text)

请注意,find_elements 将返回一个网络元素列表,而 find_element 将返回一个 single web element

如果您专门寻找 href attribute 那么您可以尝试以下代码:

for name in driver.find_elements(By.XPATH, ".//a[contains(@href, 'scheda')]"):
    print(name.get_attribute('href'))

答案 1 :(得分:1)

有两个问题,查看网站。

  1. 你想找到所有元素,而不是一个,所以你需要使用 find_elements,而不是 find_element
  2. 锚点实际上没有任何文本,因此 .text 不会返回任何内容。

假设您想要抓取所有这些链接的 URL,您可以使用 .get_attribute('href') 而不是 .text,如下所示:

url_list = driver.find_elements(By.XPATH, './/a[contains(@href, "scheda")]')
for i in url_list:
    print(i.get_attribute('href'))

它将检测所有符合您标准的网络元素并将它们存储在列表中。我只是以打印为例,但显然您可能想做的不仅仅是打印链接。