Python 无法获取相关链接并放弃其他链接
我已经用python和selenium以及BeautifulSoup编写了一个脚本,以从网页中获取指向属性详细信息的链接。由于内容是高度动态的,我使用selenium获取页面源代码。当我运行脚本时,我会得到很多链接,包括那些必需的链接 如何仅从三个容器中的每个容器获取相关链接? 我的尝试: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
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选择器解决方案仍然是我所寻找的。谢谢。为什么要投否决票!!我的问题不是很清楚,很难理解吗?如果这篇文章缺少任何东西,我是否应该再添加一些细节来澄清?我真的很难想出一个好问题!!!我不知道为什么有人投了反对票。我认为这是一个很有道理的问题,清楚地说明了你在尝试什么和你想要的结果。为什么要投反对票!!我的问题不是很清楚,很难理解吗?如果这篇文章缺少任何东西,我是否应该再添加一些细节来澄清?我真的很难想出一个好问题!!!我不知道为什么有人投了反对票。我认为这是一个有效的问题,你正在尝试什么和你想要的结果有明确的例子。