我正在尝试从网站复制href值,并且html代码如下所示:
<p class="sc-eYdvao kvdWiq">
<a href="https://www.iproperty.com.my/property/setia-eco-park/sale-
1653165/">Shah Alam Setia Eco Park, Setia Eco Park
</a>
</p>
我尝试过driver.find_elements_by_css_selector(".sc-eYdvao.kvdWiq").get_attribute("href")
,但返回了'list' object has no attribute 'get_attribute'
。使用driver.find_element_by_css_selector(".sc-eYdvao.kvdWiq").get_attribute("href")
返回了None
。但是我不能使用xpath,因为该网站有20+ href,我需要全部复制。使用xpath只会复制一个。
如果有帮助,则将所有20+ href归为同一类sc-eYdvao kvdWiq
。
最终,我想复制所有20+ href,并将其导出到csv文件中。
感谢所有可能的帮助。
答案 0 :(得分:3)
按照给定的HTML:
<p class="sc-eYdvao kvdWiq">
<a href="https://www.iproperty.com.my/property/setia-eco-park/sale-1653165/">Shah Alam Setia Eco Park, Setia Eco Park</a>
</p>
理想情况下,由于href
属性位于<a>
标记内,因此您需要更深入地移动到<a>
节点。因此,要提取href
属性的值,可以使用以下任一Locator Strategies:
使用css_selector
:
print(driver.find_element_by_css_selector("p.sc-eYdvao.kvdWiq > a").get_attribute('href'))
使用xpath
:
print(driver.find_element_by_xpath("//p[@class='sc-eYdvao kvdWiq']/a").get_attribute('href'))
如果要提取href
属性的所有值,则需要使用find_elements*
:
使用css_selector
:
print([my_elem.get_attribute("href") for my_elem in driver.find_elements_by_css_selector("p.sc-eYdvao.kvdWiq > a")])
使用xpath
:
print([my_elem.get_attribute("href") for my_elem in driver.find_elements_by_xpath("//p[@class='sc-eYdvao kvdWiq']/a")])
但是,如果您观察 class 属性的值,即sc-eYdvao
和kvdWiq
最好是动态的 价值观。因此,要提取href
属性,必须为visibility_of_element_located()
引入WebDriverWait,并且可以使用以下任一 Locator Strategies :
使用CSS_SELECTOR
:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "p.sc-eYdvao.kvdWiq > a"))).get_attribute('href'))
使用XPATH
:
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//p[@class='sc-eYdvao kvdWiq']/a"))).get_attribute('href'))
如果要提取href
属性的所有值,则可以改用visibility_of_all_elements_located()
:
使用CSS_SELECTOR
:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "p.sc-eYdvao.kvdWiq > a")))])
使用XPATH
:
print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//p[@class='sc-eYdvao kvdWiq']/a")))])
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 1 :(得分:2)
如果要有多个元素,则需要driver.find_elements。这将返回一个列表。对于css选择器,您要确保选择的是具有子href的类
elems = driver.find_elements_by_css_selector(".sc-eYdvao.kvdWiq [href]")
links = [elem.get_attribute('href') for elem in elems]
您可能还需要一个等待条件,以确保css选择器定位的所有元素都存在。
elems = WebDriverWait(driver,10.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".sc-eYdvao.kvdWiq [href]")))
答案 2 :(得分:0)
尝试类似的东西:
elems = driver.find_elements_by_xpath("//p[contains(@class, 'sc-eYdvao') and contains(@class='kvdWiq')]/a")
for elem in elems:
print elem.get_attribute['href']
答案 3 :(得分:0)
要抓取任何超链接或 Href,proxycrwal API 是理想的选择,因为它使用预先构建的函数来获取所需信息。只需 pip install API 并按照代码获取所需的输出。第二种使用 python selenium 获取 Href 链接的方法是运行以下代码。
<块引用>源代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
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.webdriver.support.ui import Select
import time
list = ['https://www.heliosholland.com/Ampullendoos-voor-63-ampullen','https://www.heliosholland.com/lege-testdozen’]
driver = webdriver.Chrome()
wait = WebDriverWait(driver,29)
for i in list:
driver.get(i)
image = wait.until(EC.visibility_of_element_located((By.XPATH,'/html/body/div[1]/div[3]/div[2]/div/div[2]/div/div/form/div[1]/div[1]/div/div/div/div[1]/div/img'))).get_attribute('src')
print(image)
要抓取链接,请使用 .get_attribute('src')。
答案 4 :(得分:-1)
XPATH
//p[@class='sc-eYdvao kvdWiq']/a
返回您要查找的元素。
将数据写入CSV文件与抓取挑战无关。只需尝试查看示例,您就可以做到。