如何使用Google Apps Script抓取网页剩余3个目标数据点?
提取网页剩余数据点的解决方案
方法一:正则表达式匹配(快速实现,依赖页面结构)
直接在原有代码基础上添加正则规则,匹配你需要的另外3个数据点(假设为价格、卧室数、浴室数,可根据实际需求调整正则):
function extractDataFromUrl() { var url = "https://h3p1c2bj.r.us-east-1.awstrack.me/L0/https:%2F%2Fduproprio.com%2Fen%2F1037325%3Futm_source=alerts%26utm_medium=email%26utm_campaign=qc-en-property%26utm_content=photo-propriete-2/1/0100018712213f2c-181f0f4a-951f-46e5-bc01-c2dc66276552-000000/ObF-c1cmnxhP6DpL7H7kY5QaxH0=314"; // 获取重定向后的页面HTML内容 var response = UrlFetchApp.fetch(url); var htmlContent = response.getContentText(); // 提取房源编号(保留原逻辑) const idRegex = /#(\d+)/; const propertyId = idRegex.exec(htmlContent) ? idRegex.exec(htmlContent)[1] : null; // 提取价格(匹配$开头的千分位格式金额) const priceRegex = /(\$\d{1,3}(?:,\d{3})+)/; const price = priceRegex.exec(htmlContent) ? priceRegex.exec(htmlContent)[1] : null; // 提取卧室数量(忽略大小写,兼容单复数) const bedroomRegex = /(\d+)\s+bedroom(s)?/i; const bedrooms = bedroomRegex.exec(htmlContent) ? bedroomRegex.exec(htmlContent)[1] : null; // 提取浴室数量(忽略大小写,兼容单复数) const bathroomRegex = /(\d+)\s+bathroom(s)?/i; const bathrooms = bathroomRegex.exec(htmlContent) ? bathroomRegex.exec(htmlContent)[1] : null; // 输出所有提取结果 Logger.log(`房源编号: ${propertyId}`); Logger.log(`价格: ${price}`); Logger.log(`卧室数: ${bedrooms}`); Logger.log(`浴室数: ${bathrooms}`); }
方法二:DOM解析(更稳定,不易受页面小改动影响)
正则容易因页面结构微调失效,用DOM解析直接定位页面元素更可靠。需要先通过浏览器开发者工具查看目标数据对应的元素选择器(比如class、id),再替换代码中的选择器:
function extractDataWithDOM() { var url = "https://h3p1c2bj.r.us-east-1.awstrack.me/L0/https:%2F%2Fduproprio.com%2Fen%2F1037325%3Futm_source=alerts%26utm_medium=email%26utm_campaign=qc-en-property%26utm_content=photo-propriete-2/1/0100018712213f2c-181f0f4a-951f-46e5-bc01-c2dc66276552-000000/ObF-c1cmnxhP6DpL7H7kY5QaxH0=314"; var response = UrlFetchApp.fetch(url); var htmlContent = response.getContentText(); // 解析HTML为DOM对象 var parser = new DOMParser(); var dom = parser.parseFromString(htmlContent, 'text/html'); // 替换为实际页面的元素选择器(需自行查看网页结构) var propertyId = dom.querySelector('.property-reference')?.textContent.trim().replace('#', '') || null; var price = dom.querySelector('.price-tag')?.textContent.trim() || null; var bedrooms = dom.querySelector('.feature-item--bedrooms .feature-item__value')?.textContent.trim() || null; var bathrooms = dom.querySelector('.feature-item--bathrooms .feature-item__value')?.textContent.trim() || null; // 输出结果 Logger.log(`房源编号: ${propertyId}`); Logger.log(`价格: ${price}`); Logger.log(`卧室数: ${bedrooms}`); Logger.log(`浴室数: ${bathrooms}`); }
注意事项
- 正则表达式需根据网页实际HTML结构调整,如果网站更新布局,正则可能需要重新编写
- DOM解析的关键是获取正确的元素选择器:打开目标网页,右键点击数据点→检查,复制对应的class或id
- 如果遇到跨域或反爬限制,可能需要在
UrlFetchApp.fetch中添加请求头(模拟浏览器UA):
var options = { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } }; var response = UrlFetchApp.fetch(url, options);
内容的提问来源于stack exchange,提问作者user12736831
相关产品推荐
相关产品推荐

