如何提取房产网站中可点击地图的URL?(BeautifulSoup爬虫问题)
我需要从房产页面(链接:https://www.rightmove.co.uk/properties/119854820#/?channel=RES_BUY)中提取显示建筑位置的可点击地图的URL。
可点击地图截图:
目标元素截图:
我尝试用BeautifulSoup写了以下代码,但不管是指定选择器还是遍历所有img标签,都无法获取目标链接:
response = requests.get(url) content = BeautifulSoup(response.text, 'lxml') images = [image['src'] for image in content.findAll('a', {'class': '_1kck3jRw2PGQSOEy3Lihgp'})] images = [image['src'] for image in content.select('div', {'class': '_38EHcC14J7Q40UwAPp10QP'})] urls = [urll.get("href") for urll in content.findAll('a', {'class': '_1kck3jRw2PGQSOEy3Lihgp'})] all_imgs = [img.get('data-src') for img in content.select('img.lazy')]
请问这个可点击地图在HTML里是不是有特殊处理?
Rightmove的这类地图元素大概率是动态加载的——你用requests.get()拿到的只是页面的初始静态HTML,而地图的实际链接是页面加载完成后通过JavaScript动态渲染出来的,所以BeautifulSoup根本抓不到这些动态生成的内容。
给你两个可行的解决思路:
用Selenium模拟浏览器加载页面:
Selenium会像真实浏览器一样加载页面并执行JS,等地图元素渲染完成后再抓取。示例代码如下:from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC url = "https://www.rightmove.co.uk/properties/119854820#/?channel=RES_BUY" driver = webdriver.Chrome() # 需提前安装ChromeDriver并配置环境变量 driver.get(url) # 等待地图元素加载完成,选择器需根据实际渲染后的HTML调整 map_link = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "a._1kck3jRw2PGQSOEy3Lihgp")) ) map_url = map_link.get_attribute("href") print(map_url) driver.quit()抓取页面的API接口:
打开浏览器开发者工具(F12)切换到「网络」标签,刷新页面后查找加载地图相关的API请求——Rightmove通常会在页面加载时调用接口获取房产位置信息,地图链接可能就藏在这些接口返回的JSON数据里。这种方法比Selenium更高效,无需模拟浏览器。
另外,你之前的代码有个小错误:content.select('div', {'class': '_38EHcC14J7Q40UwAPp10QP'})写法不对,select方法参数是CSS选择器,正确写法应为content.select('div._38EHcC14J7Q40UwAPp10QP'),不过就算改对,也因动态加载问题拿不到内容。
内容的提问来源于stack exchange,提问作者user3390486

