簡體   English   中英

從網站中提取超鏈接 - Selenium

[英]Extract a hyperlink from a website - Selenium

我試圖解決這個問題一段時間,並在打開這個問題之前嘗試了在這里發布的多個解決方案。

我目前正在嘗試使用以下代碼運行刮刀

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只輸出一個超鏈接,第二個問題是到目前為止它沒有提取任何內容。

我很感激任何幫助和/或指導。

您需要改用find_elements

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

請注意, find_elements將返回 web 元素列表,而find_element返回single web element

如果您專門尋找href attribute則可以嘗試以下代碼:

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

有2個問題,看網站。

  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'))

它將檢測符合您標准的所有網絡元素並將它們存儲在列表中。 我只是以打印為例,但顯然您可能想做的不僅僅是打印鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM