Python 无法获取相关链接并放弃其他链接

Python 无法获取相关链接并放弃其他链接,python,python-3.x,selenium,web-scraping,beautifulsoup,Python,Python 3.x,Selenium,Web Scraping,Beautifulsoup,我已经用python和selenium以及BeautifulSoup编写了一个脚本,以从网页中获取指向属性详细信息的链接。由于内容是高度动态的,我使用selenium获取页面源代码。当我运行脚本时,我会得到很多链接,包括那些必需的链接 如何仅从三个容器中的每个容器获取相关链接? 我的尝试: from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.by import By

我已经用python和selenium以及BeautifulSoup编写了一个脚本,以从网页中获取指向属性详细信息的链接。由于内容是高度动态的,我使用selenium获取页面源代码。当我运行脚本时,我会得到很多链接,包括那些必需的链接

如何仅从三个容器中的每个容器获取相关链接?

我的尝试:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def fetch_info(link):
    driver.get(link)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#community-search-homes .propertyWrapper > a")))
    soup = BeautifulSoup(driver.page_source, "lxml")
    linklist = [item.get("href") for item in soup.select("#community-search-homes .propertyWrapper > a")]
    return linklist

if __name__ == '__main__':
    url = "https://www.khov.com/find-new-homes/arizona/buckeye"
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    for newlink in fetch_info(url):
        print(newlink)
    driver.quit()
我得到的结果是:

/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/aspire-at-sienna-hills
/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/affinity-at-verrado
/find-new-homes/arizona/buckeye/85396/four-seasons/k.-hovnanian's-four-seasons-at-victory-at-verrado
/find-new-homes/arizona/scottsdale/85255/k-hovnanian-homes/summit-at-silverstone
/find-new-homes/arizona/scottsdale/85257/k-hovnanian-homes/skye
/find-new-homes/arizona/phoenix/85020/k-hovnanian-homes/pointe-16
/find-new-homes/arizona/peoria/85383/k-hovnanian-homes/fusion-ii-at-the-meadows
/find-new-homes/arizona/scottsdale/85257/k-hovnanian-homes/aire
/find-new-homes/arizona/scottsdale/85255/k-hovnanian-homes/pinnacle-at-silverstone
/find-new-homes/arizona/peoria/85383/k-hovnanian-homes/montage-at-the-meadows
/find-new-homes/arizona/sun-city/85373/four-seasons/k.-hovnanian-s-four-seasons-at-ventana-lakes
/find-new-homes/arizona/peoria/85382/k-hovnanian-homes/park-paseo
/find-new-homes/arizona/laveen/85339/k-hovnanian-homes/affinity-at-montana-vista
/find-new-homes/arizona/laveen/85339/k-hovnanian-homes/aspire-at-montana-vista
/find-new-homes/arizona/scottsdale/85255/k-hovnanian-homes/pinnacle-ii-at-silverstone
/find-new-homes/arizona/scottsdale/85255/k-hovnanian-homes/summit-ii-at-silverstone
我想得到的结果是:

/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/aspire-at-sienna-hills
/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/affinity-at-verrado
/find-new-homes/arizona/buckeye/85396/four-seasons/k.-hovnanian's-four-seasons-at-victory-at-verrado
一块html元素(
我要查找的链接位于以下元素的第二行内
):


宽度:960px;左:0px;“>
宽度:320px;“>
宽度:320px;“>

    • 亚利桑那州七叶树的新家 在锡耶纳山向往

      亚利桑那州七叶树市西阿尔梅里亚路21007号,邮编85396

      最终机会

      定价时间:200美元左右

      住宅类型:单户住宅

      便利设施:游泳池、远足小径、公园


您只需在链接中检查所需的关键字并打印这些关键字,而忽略其他关键字:

if __name__ == '__main__':
    url = "https://www.khov.com/find-new-homes/arizona/buckeye"
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    for newlink in fetch_info(url):
        if url.split('/')[-1] in newlink:
            print(newlink)
    driver.quit()
输出:

/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/aspire-at-sienna-hills
/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/affinity-at-verrado
/find-new-homes/arizona/buckeye/85396/four-seasons/k.-hovnanian's-four-seasons-at-victory-at-verrado

您只需在链接中检查所需的关键字并打印这些关键字,然后忽略其他关键字:

if __name__ == '__main__':
    url = "https://www.khov.com/find-new-homes/arizona/buckeye"
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    for newlink in fetch_info(url):
        if url.split('/')[-1] in newlink:
            print(newlink)
    driver.quit()
输出:

/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/aspire-at-sienna-hills
/find-new-homes/arizona/buckeye/85396/k-hovnanian-homes/affinity-at-verrado
/find-new-homes/arizona/buckeye/85396/four-seasons/k.-hovnanian's-four-seasons-at-victory-at-verrado

你会列出切片工作吗

def fetch_info(link):
    driver.get(link)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#community-search-homes .propertyWrapper > a")))
    soup = BeautifulSoup(driver.page_source, "lxml")
    linklist = [item.get("href") for item in soup.select("#community-search-homes .propertyWrapper > a")][:3]
    return linklist

你会列出切片工作吗

def fetch_info(link):
    driver.get(link)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#community-search-homes .propertyWrapper > a")))
    soup = BeautifulSoup(driver.page_source, "lxml")
    linklist = [item.get("href") for item in soup.select("#community-search-homes .propertyWrapper > a")][:3]
    return linklist

您需要包括特征id和结果。您可以使用或组合。最新的bs4支持
而不是

#propertyResultsContainer .propertyWrapper :not([onclick])[href*=find], #propertyFeaturedResultsContainer  .propertyWrapper :not([onclick])[href*=find]
这也可以缩短为

#propertyResultsContainer .propertyWrapper :not([onclick])[href*=find], #propertyFeaturedResultsContainer

但是这种缩短可能不太可靠。

您需要包括特征id和结果。您可以使用或组合。最新的bs4支持
而不是

#propertyResultsContainer .propertyWrapper :not([onclick])[href*=find], #propertyFeaturedResultsContainer  .propertyWrapper :not([onclick])[href*=find]
这也可以缩短为

#propertyResultsContainer .propertyWrapper :not([onclick])[href*=find], #propertyFeaturedResultsContainer

但是这种缩短可能不太可靠。

我正在使用许多不同的链接,就像我在脚本中使用的链接一样。因此,如果我选择另一个链接,任何硬编码字符串筛选都不会有任何帮助。我希望有任何纯css选择器解决方案。谢谢@chitown88。好的。您可以像使用动态变量一样使用关键字。我假设您将输入url,对吗?如果您尝试
https://www.khov.com/find-new-homes/arizona/casa-grande-city
。所以,css选择器解决方案仍然是我所寻找的。谢谢。我正在玩很多不同的链接,就像我在脚本中使用的链接一样。因此,如果我选择另一个链接,任何硬编码字符串筛选都不会有任何帮助。我希望有任何纯css选择器解决方案。谢谢@chitown88。好的。您可以像使用动态变量一样使用关键字。我假设您将输入url,对吗?如果您尝试
https://www.khov.com/find-new-homes/arizona/casa-grande-city
。所以,css选择器解决方案仍然是我所寻找的。谢谢。为什么要投否决票!!我的问题不是很清楚,很难理解吗?如果这篇文章缺少任何东西,我是否应该再添加一些细节来澄清?我真的很难想出一个好问题!!!我不知道为什么有人投了反对票。我认为这是一个很有道理的问题,清楚地说明了你在尝试什么和你想要的结果。为什么要投反对票!!我的问题不是很清楚,很难理解吗?如果这篇文章缺少任何东西,我是否应该再添加一些细节来澄清?我真的很难想出一个好问题!!!我不知道为什么有人投了反对票。我认为这是一个有效的问题,你正在尝试什么和你想要的结果有明确的例子。