PHP,如何刮取iframe的内容?

时间:2016-10-14 00:34:15

标签: php web web-scraping

我使用php简单的dom做一些报废,

但是目前我正在使用iframe进行摇滚,

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

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

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

这可以使用PHP和php简单的dom吗?

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

2 个答案:

答案 0 :(得分:1)

当您进入网站时 - 您的浏览器发出HTTP请求(而不是服务器),因此您可以毫无问题地发出HTTP请求来获取iframe的内容。尝试使用view-source而不是在浏览器中显示iframe网址(也许它受javascript保护)。

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

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

答案 1 :(得分:1)

  

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

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

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

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