我使用php简单的dom做一些报废,
但是目前我正在使用iframe进行摇滚,
我无法直接使用php简单dom解析iframe的内容(它从iframe内容中找不到任何内容),
当我尝试访问该iframe的“src”值时,似乎iframe的“src”只允许从该特定网站ip访问(我无法将src值复制粘贴到另一个Web浏览器并获取内容,如果我尝试这样做,它将只返回空白屏幕),
我的问题是如何克服这个问题?
这可以使用PHP和php简单的dom吗?
或者我应该使用不同的PHP库甚至不同的语言(不是PHP)?
答案 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请求。