python网页抓取定价和隐藏元素与硒part2



所以这是我之前问题的延续,在Prophet的帮助下,我能够让它工作。直到上周。

基本上:在这个网站上,每个列表都有一个MLS号码,我正试图废弃它。

现在的变化,因为原来的问题主要是一个新的逻辑来处理随机弹出窗口通过一个尝试块尝试点击随机弹出窗口,如果它的工作进行废料,如果它找不到弹出窗口然后进行废料无论如何。那块逻辑行得通。但是现在当我运行代码时,我注意到价格和MLS回收返回空结果。

我添加了一个print语句,并确认mls和price都是空的:mls is price is

main.py是带有try块的代码。https://github.com/jzoudavy/webScrap_Selenium/blob/main/main.py

为了简化,我去掉了try块和其他额外的东西:https://github.com/jzoudavy/webScrap_Selenium/blob/main/test.py但是运行test.py也确认我不再拾取价格或ml,其他一切都很好。

你可以试试下面的例子:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
options = webdriver.ChromeOptions()
options.add_argument("--no-sandbox")
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument("start-maximized")
options.add_experimental_option("detach", True)

s=Service('./chromedriver')
driver= webdriver.Chrome(service=s, options=options)
url='https://www.centris.ca/en/properties~for-sale~brossard?view=Thumbnail'
driver.get(url)
time.sleep(4)

listings = driver.find_elements(By.CLASS_NAME, 'description')
for listing in listings:
    try:
        price = listing.find_element(By.XPATH, './/*[@itemprop="price"]//following-sibling::span[1]').text
        data_mlsnumber = listing.find_element(By.XPATH, './/*[@class="a-more-detail"]').get_attribute('data-mlsnumber')
        print(price , data_mlsnumber)
    except:
        pass
    

输出:

$379,900 26194286
$529,900 23424373
$1,198,000 11994635
$345,900 23572465
$769,000 18521757
$574,000 28083515
$445,000 16204179
$329,000 14472385
$499,000 21331679
$515,000 13217312
$445,000 25003504
$799,000 9396792
$848,000 16371416
$598,000 10627269
$439,000 23978353
$419,900 16298302
$750,000 15553712
$429,000 24377480
$599,000 25292367
$1,790,000 21076634

解决方案

您可以通过get_attribute()获得广告和帖子中的data-mlsnumber

ads = driver.find_elements(By.XPATH, "//div[@class='description']/a")
prices = driver.find_elements(By.XPATH, "//div[@class='price']/span[text()][not(@class='desc')]")
for i in range(0, len(ads)):
    print(f'mls: {ads[i].get_attribute("data-mlsnumber")}, price: {prices[i].text.strip()}')

最新更新