我的目标:在AptDeco网站(以下代码中的网址)上,有指向60件家具的链接。我想刮掉所有60个链接。我的解决方案是:(i)创建一个硒驱动程序,(2)在该驱动程序上加载AptDeco网页,(3)将HTML代码从已加载的网页中提取到漂亮的汤中,(4)从漂亮的汤中提取所有HTML链接(请参见下面的代码)
我的问题:我下载到名为“ html_page”的变量的HTML源代码仅包含前6件家具。我可以手动重新创建问题。如果我在浏览器中转到该URL,请右键单击并选择“查看页面源代码”,我会看到HTML源代码,其中仅包含指向前6个项目的链接。如果我在浏览器中转到该URL,请右键单击并选择“检查”,我会看到HTML源代码,其中包含指向所有60个项目的链接。有没有一种方法可以编写一段代码来提取显示在“检查”版本而不是“查看页面源代码”版本中的HTML代码?我的假设是网站是动态的,并且有一个JavaScript已在“检查” HTML版本中执行,但未在“查看页面源代码”版本中执行,但是我不确定如何获取所需的版本
编辑:有人指出,也许我需要等待Ajax内容加载。加载网址后,我进行了一些测试,以确认这不是问题。首先,我检查是否还有jQuery仍处于活动状态(引发Exception,没有jQuery)。其次,我检查了document.readyState是否完整。在这两个测试之后,我运行了“ html_page = driver.page_source”代码行,发现我仍然遇到相同的问题。
from selenium import webdriver
from bs4 import BeautifulSoup
url = 'https://www.aptdeco.com/catalog'
driver = webdriver.Chrome()
driver.get(url)
html_page = driver.page_source
soup = BeautifulSoup(html_page, "html.parser")
for link in soup.findAll('a', class_='Card__CardLink-rr6223-1 crcHwb'):
print(link.get('href'))