php实现采集电影数据
PHP采集电影数据的方法
使用cURL获取网页内容 cURL是PHP中用于发送HTTP请求的库,可以模拟浏览器行为获取目标网页的HTML内容。需要确保服务器已安装cURL扩展。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com/movies");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
解析HTML内容 可以使用DOMDocument或第三方库如Simple HTML DOM Parser来解析获取的HTML内容,提取所需数据。
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$titles = $xpath->query("//h2[@class='movie-title']");
foreach ($titles as $title) {
echo $title->nodeValue . "\n";
}
处理JavaScript渲染的页面 对于动态加载内容的网站,可能需要使用无头浏览器工具如Puppeteer(通过PHP调用)或直接寻找网站的API接口。

// 使用PHP-Puppeteer示例
$puppeteer = new Nesk\Puphpeteer\Puppeteer();
$browser = $puppeteer->launch();
$page = $browser->newPage();
$page->goto('https://example.com/movies');
$html = $page->content();
$browser->close();
数据存储 将采集到的数据存储到数据库或文件中,便于后续处理和分析。
// MySQL存储示例
$pdo = new PDO('mysql:host=localhost;dbname=movies', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO movies (title, year) VALUES (?, ?)");
$stmt->execute([$movieTitle, $movieYear]);
遵守robots.txt和版权法 采集前检查目标网站的robots.txt文件,确认是否允许爬取。避免高频请求导致IP被封,合理设置爬取间隔。

使用代理和用户代理轮换 对于反爬严格的网站,可以使用代理IP池和随机用户代理来降低被封风险。
$userAgents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)'
];
curl_setopt($ch, CURLOPT_USERAGENT, $userAgents[array_rand($userAgents)]);
错误处理和日志记录 实现完善的错误处理机制,记录采集过程中的异常和失败情况。
try {
// 采集代码
} catch (Exception $e) {
file_put_contents('crawl.log', date('Y-m-d H:i:s') . ' - ' . $e->getMessage() . "\n", FILE_APPEND);
}
定时任务 对于需要定期更新的数据,可以使用cron设置定时任务自动运行采集脚本。
# 每天凌晨执行采集脚本
0 0 * * * /usr/bin/php /path/to/crawler.php






