php抓取网页(如何用PHP抓取网页上的数据?教你如何使用Headlesschrome抓取网页内容 )
优采云 发布时间: 2022-04-18 14:22php抓取网页(如何用PHP抓取网页上的数据?教你如何使用Headlesschrome抓取网页内容
)
随着近几年前端的快速发展,目前的前端趋势是使用一些 JS 框架进行开发,比如大家熟知的 React、Angular 和 Vue。有些媒体网页为了防止内容被复制,使用ajax或者使用js在网页上插入cookies,然后使用ajax进行判断。
正所谓道高一尺,魔高一尺,所以今天就教大家如何使用php抓取网页数据。
通常,用PHP爬取网页的数据无非就是CURL或者使用file_get_contents,或者使用打包后的简单html dom。这种情况下,确实可以取数据,但是不能等网页上的js加载完毕再取数据。
因此,网上有一种phantomjs的解决方案,使用php爬取js加载的网页。但是我用了之后发现有些网站会用js插入cookies,然后验证cookies。但是phantomjs无法保存cookies,phantomjs的作者放弃了维护这个项目,可能是因为chrome在59版本推出了headless功能。
什么是无头镀铬?
Headless Chrome 是 Chrome 浏览器的无界面形式。PHP使用headless chrome加载网页,然后就可以获取网页上的内容,截图,或者将截图转换成PDF
接下来是干货!教你如何使用 Headless chrome 抓取网页内容。
首先我们在Github上使用chrome php,这是一个打包好的库,所以不用自己写,直接使用即可
本文文章主要教大家如何抓取内容,Headless Chrome还有其他功能,可以看这个chrome php文档使用其他API
use HeadlessChromium\BrowserFactory;
$browserFactory = new BrowserFactory('/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome');
// starts headless chrome
$browser = $browserFactory->createBrowser();
// creates a new page and navigate to an url
$page = $browser->createPage();
$page->navigate('http://example.com')->waitForNavigation('networkIdle');
// get page content
$pageTitle = $page->evaluate('document.documentElement.innerHTML')->getReturnValue();
// bye
$browser->close();
BrowserFactory 中传递的参数是我本地机器上的 chrome。以上是mac的配置
如果是windows用户,找到自己chrome的路径,如果是linux服务器,写google-chrome的命令
窗口配置
new BrowserFactory('C:\Program Files (x86)\Google\Chrome\Application\chrome');
CentOS 配置
新的 BrowserFactory('google-chrome');
Windows和CentOS的配置我没试过。Windows 配置可在 Internet 上找到。对于 CentOS,我还没有把代码放在服务器上试用。理论上应该问题不大。如果有什么问题,请在下方留言交流,但是下面在 CentOS 上安装 Chrome 确实没问题。
在 CentOS 上安装谷歌浏览器
1.下载chrome最新rpm
2.下载后直接安装
yum localinstall google-chrome-stable_current_x86_64.rpm
3.安装后检查版本
google-chrome -version
4.可以测试截图,必须写--no-sandbox,否则无法正常工作
google-chrome --no-sandbox --headless --disable-gpu --screenshot https://www.chromestatus.com/
如果不写--no-sandbox,会报错,就是下面的错误信息
[0714/013139.867781:ERROR:(89)] 不支持在没有 –no-sandbox 的情况下以 root 身份运行。请参阅