无法获取<div id="market-stats">下<script>内容,Python爬取求助
解决方法
第一步:修正BeautifulSoup的查找语法
你的代码里find方法的参数写错了,应该用id而不是id_(id_仅用于和Python关键字冲突的属性,比如class_,id不属于这类情况)。修正后的代码片段:
data = soup.find('div', id='market-stats')
如果修正后还是返回None,说明目标内容是通过JavaScript动态渲染的,requests获取的静态HTML里不存在这部分内容。
第二步:处理动态加载内容
现代网站常通过JS动态生成页面数据,requests只能拿到初始静态HTML,无法执行JS渲染后的内容。这时可以用Selenium模拟浏览器行为获取完整页面:
安装依赖
pip install selenium
同时需要下载对应浏览器的驱动(比如ChromeDriver),确保驱动版本和你的浏览器版本匹配。
示例代码
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options url = "https://www.dotproperty.co.th/en/condo/2945/nai-harn-beach-condominium" # 配置Chrome无头模式(可选,无需打开浏览器窗口) chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36") # 初始化浏览器驱动 driver = webdriver.Chrome(options=chrome_options) driver.get(url) # 获取渲染后的页面源码 page_source = driver.page_source driver.quit() # 解析页面 soup = BeautifulSoup(page_source, "html.parser") data = soup.find('div', id='market-stats') # 提取script标签内容 if data: script_tag = data.find('script') if script_tag: print(script_tag.string) else: print("未找到目标script标签") else: print("未找到id为market-stats的div")
额外提示
- 部分网站有反爬机制,可添加
Accept、Referer等请求头,或设置请求间隔避免被封禁。 - 提取到的script内容通常是JSON格式,可通过
json模块解析为字典,方便提取房价数据。
内容的提问来源于stack exchange,提问作者Tham Tantisunthorn
相关产品推荐
相关产品推荐

