php 爬虫实现
PHP 爬虫实现方法
使用 cURL 获取网页内容
cURL 是 PHP 中用于发送 HTTP 请求的强大工具,适用于抓取网页内容。以下是一个基本示例:
$url = "https://example.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
解析 HTML 内容
使用 DOMDocument 或 SimpleHTMLDom 解析 HTML 内容,提取所需数据:
$dom = new DOMDocument();
@$dom->loadHTML($response);
$xpath = new DOMXPath($dom);
$titles = $xpath->query("//h1");
foreach ($titles as $title) {
echo $title->nodeValue . "\n";
}
处理 JavaScript 渲染的页面
对于动态加载的内容,可使用无头浏览器工具如 Puppeteer 的 PHP 封装(例如 ChromePHP):
use HeadlessChromium\BrowserFactory;
$browserFactory = new BrowserFactory();
$browser = $browserFactory->createBrowser();
$page = $browser->createPage();
$page->navigate('https://example.com')->waitForNavigation();
$html = $page->getHtml();
$browser->close();
处理分页和链接
自动遍历分页或链接时,需递归或循环处理:
$baseUrl = "https://example.com/page/";
for ($i = 1; $i <= 5; $i++) {
$pageUrl = $baseUrl . $i;
// 抓取并处理每页内容
}
数据存储
将抓取的数据保存到数据库或文件:
// 存储到 CSV
$file = fopen('data.csv', 'w');
fputcsv($file, ['Title', 'URL']);
foreach ($data as $item) {
fputcsv($file, [$item['title'], $item['url']]);
}
fclose($file);
遵守 robots.txt
检查目标网站的 robots.txt,避免爬取禁止的页面:
$robotsUrl = "https://example.com/robots.txt";
$robotsContent = file_get_contents($robotsUrl);
if (strpos($robotsContent, 'Disallow: /private/') !== false) {
// 跳过禁止爬取的路径
}
设置延迟和代理
避免被封禁,需设置请求间隔和使用代理:
curl_setopt($ch, CURLOPT_PROXY, 'proxy.example.com:8080');
sleep(2); // 延迟 2 秒
异常处理
添加错误处理逻辑,应对网络问题或解析失败:
try {
$response = curl_exec($ch);
if ($response === false) {
throw new Exception(curl_error($ch));
}
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}





