按 F12 就能看到源码。何获这是取网多数人第一次接触网页底层时的起点,也是页源最直接的办法。浏览器把 HTML、代码CSS、何获JavaScript 全部解析完之后,取网呈现在开发者工具里的页源就是当前页面的完整结构。右键菜单里那个“查看网页源代码”选项,代码打开的何获其实是服务器最初返回的原始 HTML 文本,两者经常不一样。取网
原始源码和 DOM 树之间的页源差异,值得单独说一句。代码比如你用 Vue 或 React 写的何获页面,右键查看源代码,取网body 里可能只有一个 <div id="app"></div>,页源什么内容都没有。但 F12 打开 Elements 面板,会看到密密麻麻的节点。因为框架是在浏览器端动态渲染的,原始 HTML 只是个壳。想拿真正的页面结构,得看 Elements 面板,不是右键那个。
如果只是想看某个页面的 HTML,不涉及登录、不涉及反爬,curl 一条命令就够了:
curl -s https://example.com | head -50 Windows 上用 PowerShell 的话,Invoke-WebRequest 也能达到同样效果。这类工具拿到的是服务器返回的原始响应体,没有经过浏览器渲染。好处是快、干净,坏处是遇到 JS 渲染的页面就抓瞎。
Python 里 requests 库是最常用的选择。三行代码:
import requests r = requests.get("https://example.com") print(r.text) 但很多网站会检查 User-Agent,默认的 python-requests 标识会被直接拒绝。加一个 headers 伪装成浏览器,成功率立刻上去。这不是什么高深技巧,纯粹是对方服务器在挑客户端。
遇到动态渲染的页面,requests 就无能为力了。这时候需要 Selenium 或者 Playwright 这类工具,它们驱动真实浏览器加载页面,等 JS 执行完毕后再取源码。Selenium 的 driver.page_source 拿到的就是渲染后的完整 HTML。代价是慢,启动一个 Chrome 实例至少两三秒,内存占用也高。Playwright 在这方面比 Selenium 快一些,API 也更现代。
还有一种情况:你只想提取页面里的某几个字段,不需要完整源码。BeautifulSoup 配合 requests 是经典组合,lxml 做解析器速度更快。CSS 选择器或者 XPath 定位元素,比正则表达式靠谱得多。正则解析 HTML 这件事,写过的人都懂,嵌套标签一多就崩溃。
浏览器端也有办法。打开控制台,document.documentElement.outerHTML 直接输出当前 DOM 的完整序列化结果。想复制到剪贴板的话,copy(document.documentElement.outerHTML) 一行搞定。这个操作在调试线上页面时特别顺手,不用装任何工具。
有个细节容易被忽略:iframe 里的内容不在主文档的源码里。你得先找到 iframe 元素,再进入它的 contentDocument 才能拿到内部结构。跨域的 iframe 受同源策略限制,拿不到。这是浏览器安全模型的一部分,不是 bug。
获取源码这件事,说到底取决于你要什么。原始 HTML、渲染后的 DOM、特定元素的内容,三种需求对应三套不同的工具链。选错了工具,要么拿不到数据,要么绕一大圈弯路。我自己的习惯是:静态页面用 curl 或 requests,动态页面直接上 Playwright,只取字段就用 BeautifulSoup,临时看一眼就 F12。够用了。