curl网页采集相关
Accept-Encoding需要单独设置,不能放在header里,对应curl 的CURLOPT_ENCODING属性。。如果采集到的网页是乱码,可以设置这个为gzip,deflate试试
// 例: curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
使用SimpleHTMLDom解析HTML(第三方库)
// 使用composer安装 composer require sunra/php-simple-html-dom-parser
// 示例 require 'vendor/autoload.php'; // 引入自动加载文件 $html = file_get_contents('http://example.com'); $dom = new simple_html_dom();$dom->load($html); foreach($dom->find('a') as $element) { echo $element->href . '<br>'; // 获取所有链接的href属性 } $dom->clear(); // 清除DOM对象以释放内存使用Guzzle(HTTP客户端)和Symfony的DomCrawler(DOM操作)
// 使用composer安装 composer require guzzlehttp/guzzle symfony/dom-crawler symfony/css-selecto
// 示例 require 'vendor/autoload.php'; // 引入自动加载文件 use GuzzleHttp\Client; use Symfony\Component\DomCrawler\Crawler; $client = new Client(); $response = $client->request('GET', 'http://example.com'); $html = (string) $response->getBody(); $crawler = new Crawler($html); $links = $crawler->filter('a'); // 获取所有链接的节点集合 foreach ($links as $link) { echo $link->getAttribute('href') . "\n"; // 获取链接的href属性 }总结:
选择哪种方法取决于你的具体需求,比如是否需要处理复杂的HTML结构、是否需要处理大量数据等。对于大多数情况,SimpleHTMLDom和Guzzle+DomCrawler的结合使用是比较方便和强大的选择。如果你需要处理非常复杂的HTML或者需要更高级的HTTP功能,那么使用Guzzle和DOMDocument可能是更好的选择。对于简单的需求,file_get_contents()和DOMDocument或SimpleHTMLDom已经足够了。

