当前位置:首页 > 未分类

curl网页采集相关

admin3个月前 (02-10)未分类11345
  1.  Accept-Encoding需要单独设置,不能放在header里,对应curl 的CURLOPT_ENCODING属性。。如果采集到的网页是乱码,可以设置这个为gzip,deflate试试

    1. // 例:
      curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
  2. 使用SimpleHTMLDom解析HTML(第三方库)

    1. // 使用composer安装
      composer require sunra/php-simple-html-dom-parser
    2. // 示例
      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对象以释放内存
  3. 使用Guzzle(HTTP客户端)和Symfony的DomCrawler(DOM操作)

    1. //  使用composer安装
      composer require guzzlehttp/guzzle symfony/dom-crawler symfony/css-selecto
    2. //  示例
      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属性
      }
  4. 总结:

    选择哪种方法取决于你的具体需求,比如是否需要处理复杂的HTML结构、是否需要处理大量数据等。对于大多数情况,SimpleHTMLDom和Guzzle+DomCrawler的结合使用是比较方便和强大的选择。如果你需要处理非常复杂的HTML或者需要更高级的HTTP功能,那么使用Guzzle和DOMDocument可能是更好的选择。对于简单的需求,file_get_contents()和DOMDocument或SimpleHTMLDom已经足够了。


扫描二维码推送至手机访问。

版权声明:本文由服务端开发技术分享发布,如需转载请注明出处。

本文链接:https://www.htmlcms.cn/?id=18

分享给朋友:

相关文章

PHP如何判断访问来源是微信小程序、公众号平台、APP

    //判断是什么平台     function platform()     {  &n…

ThinkPHP6,where和whereLike同时用踩坑记录

ThinkPHP6,where和whereLike同时用踩坑记录。。。// 以下示例共用条件  $where_or=[];    $where_or_i=[];  &…

ThinkPHP 使用withJoin时,field无效的解决办法

ThinkPHP 使用withJoin时,field无效的解决办法:一、 filed 改为使用 visible.    1. 需注意,visible里需要传的是数组,且主表的字段不需要加别名(wher…

MySQL 中 where in 长度过长的解决方法

在使用MySQL数据库时,我们经常会使用 where in 语句来查询一组特定的值,例如:SELECT * FROM students WHERE id IN (1,&n…

laravel 安装

laravel 安装

一、laravel 安装1、laravel 最新版本安装composer global require "laravel/installer"  #使用Composer下…

thinkphp6 多应用模式下,多个应用都需要使用图片验证码时,会共用验证码,让每个应用使用自己的验证码

1. 关闭框架层的中间件中的默认会话初始化;2. 给各个应用的中间件开启(增加)会话初始化;3. 会话初始化需要 开启/关闭 的中间件:\think\middleware\SessionInit::class。…