查看"页面源"显示的不同于cURL的HTML

Pat*_*ick 4 html curl google-chrome

首先,我的问题与此不同:cURL和网络浏览器之间的区别?

我使用Chrome浏览器访问:http://www.walmart.com/search/browse-ng.do?cat_id = 1115193_1071967然后,我查看页面源代码:

<a class="js-product-title" href="/ip/Tide-Simply-Clean-Fresh-Refreshing-Breeze-Liquid-Laundry-Detergent-138-fl-oz/33963161">

但是,我没有从命令行找到这种信息:

curl "http://www.walmart.com/search/browse-ng.do?cat_id=1115193_1071967">local.html
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会造成这种差异?我正在使用Python scrapy选择器来解析网页.

Gol*_*rol 6

您的浏览器可以执行JavaScript,而JavaScript又可以更改文档.Curl只会为您提供简单的原始输出,而不是其他内容.

如果您在浏览器中关闭JavaScript并刷新页面,您将看到它的外观不同.


Ube*_*zzy 5

除了按照另一个答案中的说明执行JS之外,您的浏览器还需要做更多的工作来从您所忽略的服务器中获取该页面,服务器可能会对此做出反应。

  • 打开Chrome,按F12,转到“网络”标签。
  • 加载您想要的页面。
  • 查找被请求的第一件事(它应该是一个文档图标,其下方是url,您也可以按“时间轴”排序以找到它)
  • 右键单击该项目,选择“复制为cURL”

将其粘贴到记事本中,看看您的浏览器发送的内容是什么,与您执行的简单curl命令相比。

curl "http://stackoverflow.com/questions/25333342/viewing-page-source-shows-different-html-than-curl" -H "Accept-Encoding: gzip,deflate,sdch" -H "Accept-Language: en-US,en;q=0.8" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Referer: http://stackoverflow.com/questions?page=2&sort=newest" -H "Cookie: <cookies redacted because lulz>" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed
Run Code Online (Sandbox Code Playgroud)

诸如发送的语言标头和用户代理(或多或少使用的浏览器和操作系统)之类的东西,即使在某些情况下,即使被请求压缩也可能导致服务器以不同的方式生成页面。这可能只是正常的反应(例如仅向浏览器,咳嗽和歌剧*提供特定于浏览器的html),或者是对新设计或功能进行更高级别A / B测试的一部分。很有可能,返回给您的URL内容可能与其他人甚至与使用其他浏览器或工具的您有所不同。

我还必须指出,您在页面上看到的不是视图源附带的内容。源是发送到浏览器进行渲染的内容。您在页面上实际看到的是渲染和执行Javascript之后的内容。大多数浏览器在右键菜单上都支持某种“检查”功能,建议您浏览其中的页面并将其与视图源中显示的内容进行比较,这将改变您对网络工作方式的看法。