Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,如何刮取iframe的内容?_Php_Web_Web Scraping - Fatal编程技术网

PHP,如何刮取iframe的内容?

PHP,如何刮取iframe的内容?,php,web,web-scraping,Php,Web,Web Scraping,我使用php simple dom进行一些废弃处理 但目前我的网站正在使用iframe 我无法用php simple dom直接解析iframe的内容(它无法从iframe内容中找到任何内容) 当我尝试访问该iframe的“src”值时,该iframe的“src”似乎只允许从该特定网站ip访问(我无法将src值复制粘贴到另一个web浏览器并获取内容,如果我尝试这样做,它将只返回空白屏幕) 我的问题是如何克服这一点 使用PHP和PHP简单dom可以做到这一点吗 或者我应该使用不同的PHP库或甚至不

我使用php simple dom进行一些废弃处理

但目前我的网站正在使用iframe

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

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

我的问题是如何克服这一点

使用PHP和PHP简单dom可以做到这一点吗


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

当你进入网站时,你的浏览器发出HTTP请求(不是服务器),因此你应该可以发出HTTP请求来获取iframe的内容。尝试使用
查看源代码
而不是在浏览器中显示iframe url(可能它受javascript保护)

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

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

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

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

更有可能的是服务器正在检查referer URL。当您的浏览器请求iframe的
src
时,它还会发送一条消息,其中包含嵌入
iframe
的页面的URL。web服务器可能会拒绝请求,除非它们来自特定的引用者


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

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