【问题标题】:PHP, How to scrape the content of an iframe?PHP,如何抓取 iframe 的内容?
【发布时间】:2016-10-14 00:34:15
【问题描述】:

我使用php simple dom做一些报废,

但目前我正在使用 iframe,因为网页正在使用 iframe,

我无法直接使用 php simple dom 解析 iframe 的内容(它没有从 iframe 内容中找到任何内容),

当我尝试访问该 iframe 的“src”值时,该 iframe 的“src”似乎只允许从该特定网站 ip 访问(我无法将 src 值复制粘贴到另一个网络浏览器并获取内容,如果我尝试这样做,它只会返回空白屏幕),

我的问题是如何克服这个问题?

使用 PHP 和 php simple dom 是否可行?

或者我应该使用不同的 PHP 库甚至不同的语言(不是 PHP)?

【问题讨论】:

  • 看起来他们不想让你窃取那里的数据
  • 使用单独的 HTTP 请求加载 IFRAME。 IFRAME 文档的内容不是包装文档的一部分。您必须进行单独的 HTTP 调用才能获取 IFRAME 的内容。
  • @nogad,来吧..你不觉得有挑战吗? :)
  • @galchen,是的,我知道这一点,这就是我问这个问题的原因。

标签: php web web-scraping


【解决方案1】:

当我尝试访问该 iframe 的“src”值时,它 [..] 只允许从该特定网站 ip 访问

不,不是这样的。 您的浏览器正在获取 iframe 的 src,而不是“网站”。必须允许所有可能的 IP 访问,否则普通用户将无法看到该 URL 的内容。

更有可能的是服务器正在检查引用 URL。当您的浏览器请求 iframe 的 src 时,它还会发送一个 HTTP header Referer,其中包含嵌入了 iframe 的页面的 URL。Web 服务器可能会拒绝来自特定引用者的请求。

幸运的是,它只是一个 HTTP 标头,您可以在获取 iframe 的 src 时自行设置。此外,在您的浏览器中检查 iframe 的 src 的完整 HTTP 请求,并可能包含您可能看到的任何其他标头。如果您复制您在浏览器中看到的确切 HTTP 请求,您必须能够获取内容;没有 Web 服务器能够区分两个相同的 HTTP 请求。

【讨论】:

  • 谢谢,这就是我要找的!
【解决方案2】:

当您进入网站时 - 您的浏览器发出 HTTP 请求(而不是服务器),因此发出 HTTP 请求以获取 iframe 的内容应该没有问题。尝试使用view-source,而不是在浏览器中显示 iframe url(可能受 javascript 保护)。

另一种可能性是他们使用的令牌或 cookie 在您的浏览器首次获取 iframe 后过期,因此您无法再次访问它。如果令牌/cookie 是使用(包装页面的)第一个请求生成的,那么您应该能够将参数添加到 iframe 的 HTTP 请求中。否则(例如,如果它是使用 ajax 生成的),那么您将需要模仿 ajax 调用(使用另一个 HTTP 请求)。

我建议使用 node.js 而不是 PHP 进行抓取,因为您可以在您的机器上运行整个 webkit 并将内容作为浏览器获取(运行 JS 等)。

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2012-01-14
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2019-06-28
    • 2013-04-10
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多