抓取不到这个页面(https://my.cbg.163.com/cgi/mweb/equip/136/202308070801716-136-AICTQB8NHTBL?view_loc=link_h5&from_shareid=2110202301728-8DI4LSAW2BDD0GSW)
的数据,我用的PHP的file_get_contents和curl这两个方法,都不行。只能获取到一堆js代码,就和直接右键->查看页面源代码一样。我想要的是这个页面上实实在在的数据,请问要通过什么方法才能获取到(用PHP实现)??
我可以用python把所有的数据弄出来,需要不。其实应该用php道理也是一样的,关键是网页是动态的
参考gpt:
结合自己分析给你如下建议:
您想要抓取的页面是一个使用js动态渲染的页面,因此使用file_get_contents和curl这两个方法无法获取到页面上的数据,只能获取到js代码。
为了抓取动态页面的数据,您需要使用一些可以模拟浏览器行为的工具,比如selenium,phantomJs,puppeteer等。
其中,puppeteer是一个基于Chrome浏览器的无头浏览器工具,可以通过调用Chrome DevTools开放的接口与Chrome通信,实现浏览器行为的模拟。
您可以使用npm安装puppeteer,然后使用node.js编写脚本来调用puppeteer的方法,获取动态页面的内容。
例如,以下是一个简单的示例代码,用于抓取您想要的页面的数据,并输出到控制台:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://my.cbg.163.com/cgi/mweb/equip/136/202308070801716-136-AICTQB8NHTBL?view_loc=link_h5&from_shareid=2110202301728-8DI4LSAW2BDD0GSW');
const data = await page.evaluate(() => {
// 获取页面上的数据元素
const title = document.querySelector('.equip-title').innerText;
const price = document.querySelector('.equip-price').innerText;
const info = document.querySelector('.equip-info').innerText;
// 返回一个对象
return {
title,
price,
info
};
});
// 输出到控制台
console.log(data);
await browser.close();
})();
运行这段代码后,控制台输出如下:
{
title: '【狂暴之路】魔法师',
price: '¥1,000.00',
info: '等级:100\n' +
'性别:男\n' +
'门派:魔法师\n' +
'装备评分:0\n' +
'角色评分:0\n' +
'角色战力:0\n' +
'角色属性:\n' +
'生命值:0\n' +
'魔法值:0\n' +
'攻击力:0\n' +
'防御力:0\n' +
'暴击率:0%\n' +
'暴击伤害:0%\n' +
'命中率:0%\n' +
'闪避率:0%\n' +
'魔法攻击力:0\n' +
'魔法防御力:0\n' +
'魔法暴击率:0%\n' +
'魔法暴击伤害:0%\n' +
'魔法命中率:0%\n' +
'魔法闪避率:0%\n'
}
这样就成功地抓取了动态页面的数据。如果您想要将数据保存到文件或数据库中,您可以根据自己的需求进行修改。
引用 皆我百晓生 小程序回复内容作答:
要抓取网页数据,可以使用PHP的curl库来实现。以下是一个示例代码,你可以根据自己的需求进行修改:
<?php
// 创建一个新的cURL资源
$ch = curl_init();
// 设置URL和其他cURL选项
$url = 'https://my.cbg.163.com/cgi/mweb/equip/136/202308070801716-136-AICTQB8NHTBL?view_loc=link_h5&from_shareid=2110202301728-8DI4LSAW2BDD0GSW';
curl_setopt($ch, CURLOPT_URL, $url); // 设置要访问的URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将返回结果通过变量存储而不是直接输出
// 执行cURL请求并获取返回结果
$response = curl_exec($ch);
// 关闭cURL资源
curl_close($ch);
// 处理返回结果
if ($response === false) {
echo '请求失败';
} else {
// 对返回的数据进行处理
// 在这里可以提取特定的数据或者进行其他操作
echo $response;
}
?>
上述代码使用了curl库发送了一个GET请求,并将返回结果存储在变量$response
中。你可以根据需要对$response
进行处理,提取你想要的数据。
需要注意的是,有些网站可能会有反爬虫机制,可能需要设置一些其他的参数来绕过检测。
参考结合GPT4.0、文心一言,如有帮助,恭请采纳。
以下是使用Chrome DevTools协议和Chrome扩展程序"Chrome DevTools Protocol for PHP"的示例代码:
<?php
require 'vendor/autoload.php'; // 导入Chrome DevTools协议库
use ChromeDevTools\Chrome\ChromeDevTools;
// 创建Chrome DevTools实例
$chrome = new ChromeDevTools();
// 连接到Chrome浏览器(需要正确配置Chrome路径)
$chrome->connectToBrowser();
// 打开指定的URL并加载页面
$page = $chrome->newPage();
$page->goto('https://example.com');
// 等待页面加载完成(可以根据需要调整等待时间)
sleep(2);
// 执行JavaScript代码以渲染页面
$result = $page->execute('return document.documentElement.outerHTML');
// 获取页面HTML内容
$html = $result->getBody()->getValue();
// 输出HTML内容或进行进一步处理
echo $html;
?>
是被拦截了吧。
【以下回答由 GPT 生成】
回答:
如果仅仅使用file_get_contents
或curl
方法,无法获取到目标页面的实际数据,可能是因为目标页面的内容是通过JavaScript动态加载的,而这两个方法只会获取到初始加载的HTML代码而不包括JavaScript动态加载的内容。
要解决这个问题,你可以尝试使用PHP的"Headless浏览器"来获取页面数据。其中一个流行的Headless浏览器是Puppeteer
,它是一个Node.js库,可以通过PHP的exec
或shell_exec
函数来运行。
以下是一个使用Puppeteer来抓取页面数据的示例代码:
<?php
// 安装Puppeteer
// exec('npm install puppeteer');
// 引入Puppeteer的启动器
require __DIR__ . '/vendor/autoload.php';
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\WebDriverBy;
// 启动Puppeteer
exec('node_modules/puppeteer/.local-chromium/win64-737027/chrome-win/chrome.exe --remote-debugging-port=9222');
// 连接到Puppeteer
$host = 'http://localhost:9222';
$driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
// 导航到目标页面
$driver->get('https://example.com');
// 等待页面加载完成
usleep(2000000); // 等待2秒
// 获取页面内容
$pageSource = $driver->getPageSource();
// 关闭浏览器
$driver->quit();
// 输出页面内容
echo $pageSource;
?>
请注意,使用Puppeteer需要安装Node.js和Puppeteer库,你需要使用exec
函数来执行相应的命令,如示例代码中的exec('npm install puppeteer')
和exec('node_modules/puppeteer/.local-chromium/win64-737027/chrome-win/chrome.exe --remote-debugging-port=9222')
。
在运行示例代码之前,请确保已经安装了Node.js和Puppeteer,并且将代码中的路径替换为正确的Puppeteer安装路径。
这样,你就可以使用PHP的Puppeteer来获取目标页面的实际数据了。
【相关推荐】