立法网站爬取疑问:页面base设置与图片相对路径解析不符
我之前爬取政府类站点时也遇到过类似的路径解析异常情况,给你几个实际可行的排查方向:
检查动态脚本对路径的修改:很多现代站点会通过JavaScript在页面加载后调整
<base>标签或者图片的src属性。你可以打开浏览器开发者工具(F12),先看Elements面板里最终的<base>标签值,再切换到Network面板查看图片的实际请求URL,对比两者的差异。另外可以在控制台执行document.baseURI,看看浏览器实际使用的基础URI是什么——有时候JS会悄悄替换<base>的内容,或者直接修改图片路径。对比原始HTML源码与浏览器渲染后的源码:有些站点会根据请求的用户代理(UA)返回不同的HTML内容,或者服务器端有条件渲染的逻辑。你可以用
curl命令直接获取页面的原始响应(比如curl https://www.legislation.gov.au/Details/F2018L00530),然后和浏览器中查看的页面源码对比,看看<base>标签在原始响应里是否和你看到的一致,有没有被浏览器JS修改过的痕迹。分析图片相对路径的写法:假设页面里的图片路径是
Images/example.png,按照<base>标签的https://www.legislation.gov.au/Details/F2018L00530/Html/Text,应该解析为https://www.legislation.gov.au/Details/F2018L00530/Html/Text/Images/example.png,但实际请求的是https://www.legislation.gov.au/Details/F2018L00530/Html/Images/example.png,这说明图片路径可能被动态改写了,或者存在../这类相对上级目录的写法被特殊处理?你可以查看图片元素的src属性在加载前后的变化。验证爬虫工具的路径解析逻辑:不同爬虫库对
<base>标签的处理可能和浏览器不一致。比如如果用Scrapy,你可以检查response.urljoin()方法的解析结果;如果用BeautifulSoup,可能需要手动处理<base>标签。对比爬虫解析出的图片URL和浏览器实际请求的URL,看看是不是工具没有正确识别<base>的优先级。
内容的提问来源于stack exchange,提问作者Rich Dominelli

