常见问题

入口页用相对路径或 base 标签写链接,搜索蜘蛛还能正确解析出目标 URL 吗

入口页里写相对链接很常见,但爬虫解析时会以当前页面 URL 或 base 标签为基准拼接成绝对地址。基准错一点,拼出来的目标 URL 就可能指向别的路径。本文讲清相对路径、协议相对链接、base 标签和字符转义对链接发现的影响,以及怎么自查入口页输出的链接落点是否正确。

常见问题

入口页用相对路径或 base 标签写链接,搜索蜘蛛还能正确解析出目标 URL 吗

入口页输出链接时,很多人图省事写相对路径,或者在页头加一个 base 标签统一基准。这类写法本身没问题,问题在于相对路径最终拼成什么地址,是由爬虫自己算的,而算出来的结果未必是你想指向的那个目标 URL。

搜索蜘蛛怎么处理相对链接

爬虫拿到 HTML 后,会把页面里每个链接地址和当前页面的 URL 做一次拼接,得到一个绝对地址,再决定要不要抓。也就是说,相对链接的含义完全取决于当前页面 URL 是谁。

常见的几种写法和结果:

  • 以斜杠开头,例如 href='/a/b.html':以当前域名为基准,无论当前页在哪个目录都指向同一个地址。
  • 不以斜杠开头,例如 href='b.html':以当前页所在目录为基准。当前页是 /x/y.html 时,拼出来是 /x/b.html,而不是 /b.html。
  • 以点斜杠开头,例如 href='./b.html':和上一条同理,仍是相对当前目录。
  • 以双点斜杠开头,例如 href='../b.html':往上一层目录,层数写错就会指到别的路径。
  • 以双斜杠开头,例如 href='//example.com/a.html':继承当前页面的协议。

最容易出事的是第二条。入口页如果本身在一个子目录里,而链接写的是不带斜杠的相对地址,爬虫拼出来的地址会多一层目录,目标 URL 就变成了另一个页面,甚至直接 404。

base 标签会整体改写解析基准

如果入口页的 head 里写了 base 标签,那么页面里所有相对链接的拼接基准都会被替换成 base 指定的地址,而不是当前页面 URL。这带来两个后果:

  • 好处是入口页可以在任意路径下复用一套相对链接,指向同一批目标 URL。
  • 风险是 base 写错、写漏结尾斜杠,或者模板里残留了旧域名的 base,整页链接的落点就会全偏。

比如 base 写成 https://example.com/abc,那么 href='b.html' 会被解析成 https://example.com/b.html,而不是 https://example.com/abc/b.html。结尾少一个斜杠,目录就少了一层,这类问题非常隐蔽。

还有几类字符会让解析跑偏

  • 链接里带空格或中文没做编码,爬虫可能截断地址,或者按编码后的形式去抓,落点和预期不一致。
  • 查询参数里的连接符没有正确转义,参数会被拆错。
  • URL 后面跟了多余的标点、引号或中文全角符号,会被当成地址的一部分。
  • 用反斜杠代替正斜杠,只在部分环境下能被纠正,不能依赖。
  • 链接用 onclick 或 data 属性承载,实际跳转地址不在 href 里,爬虫通常不会把它当作链接。

怎么自查入口页输出的链接

  1. 把入口页 HTML 抓下来,别只看浏览器渲染后的结果。
  2. 逐个链接取出原始写法,按当前页 URL 或 base 地址手工拼一次绝对地址。
  3. 对比拼出来的地址和目标 URL 列表,看有没有多目录、少目录、跨域或 404 的情况。
  4. 用站长后台的 URL 检查或抓取工具,确认爬虫实际请求的就是目标地址。
  5. 在服务器日志里核对,看请求落在哪个路径上,和预期是否一致。
相对链接本身不会影响收录,真正影响的是解析出来的绝对地址对不对。地址对了,剩下的还是内容质量和站点整体是否值得抓取,这些不是靠链接写法能解决的。

简单说,入口页里的链接最终长什么样,爬虫说了算。写相对路径或 base 标签之前,先确认基准是什么、拼出来的地址指向哪里,比事后翻日志要省事得多。