在此網頁中:https ://www.centris.ca/en/properties~for-sale~brossard?view=Thumbnail
我正在嘗試做兩件事:
- 獲取串列的價格
- 獲取串列的 MLS 編號
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
url = 'https://www.centris.ca/en/properties~for-sale~brossard?view=Thumbnail'
def scrap_pages(driver):
listings = driver.find_elements(By.CLASS_NAME, 'description')
if listings[-1].text.split('/n')[0] == '': del listings[-1]
for listing in listings:
print(listing.text.split('\n'))
price = listing.text.split('\n')[0]
prop_type = listing.text.split('\n')[1]
addr = listing.text.split('\n')[2]
city = listing.text.split('\n')[3]
sector = listing.text.split('\n')[4]
bedrooms = listing.text.split('\n')[5]
bathrooms = listing.text.split('\n')[6]
listing_item = {
'price': price,
'Address': addr,
'property Type': prop_type,
'city': city,
'bedrooms': bedrooms,
'bathrooms': bathrooms,
'sector': sector
}
centris_list.append(listing_item)
if __name__ == '__main__':
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
#chrome_options.add_argument("headless")
driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)
centris_list=[]
driver.get(url)
total_pages = driver.find_element(By.CLASS_NAME,'pager-current').text.split('/')[1].strip()
for i in range(1,int(total_pages)):
scrap_pages(driver)
driver.find_element(By.CSS_SELECTOR,'li.next> a').click()
time.sleep(0.8)
我上面的代碼已經得到了價格,但不是我想要的。我不喜歡我必須得到整個描述,然后通過整個文本/拆分/串列選擇的事實。我試圖通過以下方法之一來獲取價格,但都沒有奏效。他們都回傳了找不到元素錯誤。如果我可以讓價格起作用,我也可以調整其余資料。
#price= listing.find_element(By.CLASS_NAME, 'price').text
#price= listing.find_element(By.XPATH, './/*[@id="divMainResult"]/div[1]/div/div[2]/a/div[2]/span[1]').text
#price= listing.find_element(By.XPATH, './/*[@id="divMainResult"]/div[1]/div/div[2]/a/div[2]/meta[2]').text
#price = listing.find_element(By.CSS_SELECTOR, '#divMainResult > div:nth-child(1) > div > div.description > a > div.price').text
問題的第二部分,獲取 MLS 編號,不幸的是我無法讓它作業,他們都回傳了找不到元素錯誤。但如果我查看網頁的 HTML 源代碼,我可以看到每個串列都帶有 MLS 編號:https ://imgur.com/a/ZEoTLoO
#mls= listing.find_element(By.TAG_NAME, 'MlsNumberNoStealth').text
#mls = listing.find_element(By.CSS_SELECTOR, '#MlsNumberNoStealth').text
#mls = listing.find_element(By.ID, 'MlsNumberNoStealth').text
#mls = listing.find_element(By.XPATH, './/*[@id="MlsNumberNoStealth"]/p').text
#mls = listing.find_elements(By.TAG_NAME, 'div')
#mls = listing.find_elements(By.ID, 'MlsNumberNoStealth')
uj5u.com熱心網友回復:
你接近正確的方法。
一旦您listings通過此行獲得了元素串列,listings = driver.find_elements(By.CLASS_NAME, 'description')您就可以遍歷串列并獲取它們的價格和 MLS,如下所示:
def scrap_pages(driver):
listings = driver.find_elements(By.CLASS_NAME, 'description')
for listing in listings:
price = listing.find_element(By.XPATH, ".//div[@class='price']/meta[@itemprop='price']").text
mls = listing.find_element(By.XPATH, ".//div[@id='MlsNumberNoStealth']/p").text
所有其他細節都可以以類似的方式獲取。
uj5u.com熱心網友回復:
我不是一個優秀的程式員,但我廣泛使用 HTML、CSS 和 Javascript。我相信您可以鏈接一個可執行的 Javascript 檔案,該檔案經歷了類似...
h1.style.display = "block"
h1 {
display: none;
}
<body>
<h1 id="h1">Hidden data</h1>
</body>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524618.html
