백엔드 개발 PHP 튜토리얼 curl实现站外采集的方法和技巧_PHP教程

curl实现站外采集的方法和技巧_PHP教程

Jul 13, 2016 am 10:39 AM
curl

选择curl的理由

关于curl与file_get_contents,摘抄一段通俗易懂的对比:
file_get_contents其实是一堆内置的文件操作函数的合并版本,比如file_exists,fopen,fread,fclose,专门提供给懒人用的,而且它主要是用来对付本地文件的,但又是因为懒人的原因,同时加入了对网络文件的支持;
curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。

使用方法

1、开启curl支持

由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可;

2、使用curl进行数据抓取

复制代码 代码如下:

// 初始化一个 cURL 对象
$curl = curl_init();
// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn');
// 设置header
curl_setopt($curl, CURLOPT_HEADER, 1);
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 运行cURL,请求网页
$data = curl_exec($curl);
// 关闭URL请求
curl_close($curl);

3、通过正则匹配找到关键数据

复制代码 代码如下:

//$data是curl_exec返回的的值,即采集的目标内容
preg_match_all("/
  • (.*?)/",$data, $out, PREG_SET_ORDER);
    foreach($out as $key => $value){
        //此处$value是数组,同时记录找到带匹配字符的整句和单独匹配的字符
        echo '匹配到的整句:'.$value[0].'
    ';
        echo '单独匹配到的:'.$value[1].'
    ';
    }
  • 技巧

    1、超时的相关设置

    通过curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括:

    CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。
    CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。 )
    CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。
    CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。 在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。
    CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。

    复制代码 代码如下:

    curl_setopt($ch, CURLOPT_TIMEOUT, 60);   //只需要设置一个秒的数量就可以
    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);    //注意,毫秒超时一定要设置这个
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);  //超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用

    2、通过post提交数据,保留cookie

    复制代码 代码如下:

    //以下摘抄一个例子过来,用于学习借鉴:
    //Curl 模拟登录 discuz 程序,适合DZ7.0

    !extension_loaded('curl') && die('The curl extension is not loaded.');   

    $discuz_url = 'http://www.lxvoip.com';//论坛地址   
    $login_url = $discuz_url .'/logging.php?action=login';//登录页地址   
    $get_url = $discuz_url .'/my.php?item=threads'; //我的帖子   

    $post_fields = array();   
    //以下两项不需要修改   
    $post_fields['loginfield'] = 'username';   
    $post_fields['loginsubmit'] = 'true';   
    //用户名和密码,必须填写   
    $post_fields['username'] = 'lxvoip';   
    $post_fields['password'] = '88888888';   
    //安全提问   
    $post_fields['questionid'] = 0;   
    $post_fields['answer'] = '';   
    //@todo验证码   
    $post_fields['seccodeverify'] = '';   

    //获取表单FORMHASH   
    $ch = curl_init($login_url);   
    curl_setopt($ch, CURLOPT_HEADER, 0);   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
    $contents = curl_exec($ch);   
    curl_close($ch);   
    preg_match('//i', $contents, $matches);   
    if(!empty($matches)) {   
        $formhash = $matches[1];   
    } else {   
        die('Not found the forumhash.');   
    }   

    //POST数据,获取COOKIE   
    $cookie_file = dirname(__FILE__) . '/cookie.txt';   
    //$cookie_file = tempnam('/tmp');   
    $ch = curl_init($login_url);   
    curl_setopt($ch, CURLOPT_HEADER, 0);   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
    curl_setopt($ch, CURLOPT_POST, 1);   
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);   
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);   
    curl_exec($ch);   
    curl_close($ch);   

    //带着上面得到的COOKIE获取需要登录后才能查看的页面内容   
    $ch = curl_init($get_url);   
    curl_setopt($ch, CURLOPT_HEADER, 0);   
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);   
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);   
    $contents = curl_exec($ch);   
    curl_close($ch);   

    var_dump($contents);

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/728088.htmlTechArticle选择curl的理由 关于curl与file_get_contents,摘抄一段通俗易懂的对比: file_get_contents其实是一堆内置的文件操作函数的合并版本,比如file_ex...
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    인기 기사

    R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
    4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 최고의 그래픽 설정
    4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
    4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. 채팅 명령 및 사용 방법
    4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    Python에서 CURL과 Python 요청 간의 상호 변환을 실현하는 방법 Python에서 CURL과 Python 요청 간의 상호 변환을 실현하는 방법 May 03, 2023 pm 12:49 PM

    컬과 Pythonrequests는 모두 HTTP 요청을 보내는 강력한 도구입니다. 컬은 터미널에서 직접 요청을 보낼 수 있는 명령줄 도구인 반면, Python의 요청 라이브러리는 Python 코드에서 요청을 보내는 보다 프로그래밍적인 방법을 제공합니다. 컬을 Pythonrequestscurl 명령으로 변환하는 기본 구문은 다음과 같습니다. 컬[OPTIONS]URL 컬 명령을 Python 요청으로 변환할 때 옵션과 URL을 Python 코드로 변환해야 합니다. 다음은 컬POST 명령의 예입니다: 컬-XPOST https://example.com/api

    Linux에서 컬 버전을 업데이트하는 방법에 대한 튜토리얼입니다! Linux에서 컬 버전을 업데이트하는 방법에 대한 튜토리얼입니다! Mar 07, 2024 am 08:30 AM

    Linux에서 컬 버전을 업데이트하려면 다음 단계를 따르세요. 현재 컬 버전을 확인하세요. 먼저 현재 시스템에 설치된 컬 버전을 확인해야 합니다. 터미널을 열고 다음 명령을 실행합니다. 컬 --version 이 명령은 현재 컬 버전 정보를 표시합니다. 사용 가능한 컬 버전 확인: 컬을 업데이트하기 전에 사용 가능한 최신 버전을 확인해야 합니다. 최신 버전의 컬을 찾으려면 컬의 공식 웹사이트(curl.haxx.se)나 관련 소프트웨어 소스를 방문하세요. 컬 소스 코드 다운로드: 컬 또는 브라우저를 사용하여 선택한 컬 버전의 소스 코드 파일(일반적으로 .tar.gz 또는 .tar.bz2)을 다운로드합니다.

    처음부터 끝까지: PHP 확장 cURL을 사용하여 HTTP 요청을 만드는 방법 처음부터 끝까지: PHP 확장 cURL을 사용하여 HTTP 요청을 만드는 방법 Jul 29, 2023 pm 05:07 PM

    처음부터 끝까지: HTTP 요청에 PHP 확장 cURL을 사용하는 방법 소개: 웹 개발에서는 종종 타사 API 또는 기타 원격 서버와 통신해야 합니다. cURL을 사용하여 HTTP 요청을 하는 것은 일반적이고 강력한 방법입니다. 이 기사에서는 PHP를 사용하여 cURL을 확장하여 HTTP 요청을 수행하는 방법을 소개하고 몇 가지 실용적인 코드 예제를 제공합니다. 1. 준비 먼저 php에 cURL 확장이 설치되어 있는지 확인하세요. 명령줄에서 php-m|grepcurl을 실행하여 확인할 수 있습니다.

    PHP8.1 출시: 여러 요청을 동시에 처리하기 위한 컬(curl) 도입 PHP8.1 출시: 여러 요청을 동시에 처리하기 위한 컬(curl) 도입 Jul 08, 2023 pm 09:13 PM

    PHP8.1 출시: 여러 요청의 동시 처리를 위한 컬 소개 최근 PHP는 여러 요청의 동시 처리를 위한 컬이라는 중요한 기능을 도입한 최신 버전의 PHP8.1을 공식 출시했습니다. 이 새로운 기능은 개발자에게 여러 HTTP 요청을 처리하는 보다 효율적이고 유연한 방법을 제공하여 성능과 사용자 경험을 크게 향상시킵니다. 이전 버전에서는 여러 요청을 처리하려면 여러 컬 리소스를 만들고 루프를 사용하여 각각 데이터를 보내고 받아야 하는 경우가 많았습니다. 이 방법으로 목적을 달성할 수는 있지만

    PHP Curl에서 웹 페이지의 301 리디렉션을 처리하는 방법은 무엇입니까? PHP Curl에서 웹 페이지의 301 리디렉션을 처리하는 방법은 무엇입니까? Mar 08, 2024 am 11:36 AM

    PHPCurl에서 웹 페이지의 301 리디렉션을 처리하는 방법은 무엇입니까? PHPCurl을 사용하여 네트워크 요청을 보낼 때 웹 페이지에서 반환된 301 상태 코드를 자주 접하게 되는데, 이는 페이지가 영구적으로 리디렉션되었음을 나타냅니다. 이 상황을 올바르게 처리하려면 Curl 요청에 몇 가지 특정 옵션과 처리 논리를 추가해야 합니다. 다음은 PHPCurl에서 웹페이지의 301 리디렉션을 처리하는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 301 리디렉션 처리 원칙 301 리디렉션은 서버가 30을 반환한다는 의미입니다.

    리눅스 컬이 뭐야? 리눅스 컬이 뭐야? Apr 20, 2023 pm 05:05 PM

    Linux에서 컬은 서버와 데이터를 전송하는 매우 실용적인 도구입니다. 이는 명령줄에서 작동하는 URL 규칙을 사용하는 파일 전송 도구이며, 포괄적인 전송 도구입니다. Curl은 프록시 액세스, 사용자 인증, FTP 업로드 및 다운로드, HTTP POST, SSL 연결, 쿠키 지원, 중단점 재개 등 매우 유용한 기능을 많이 제공합니다.

    PHP 컬에서 쿠키를 설정하는 방법 PHP 컬에서 쿠키를 설정하는 방법 Sep 26, 2021 am 09:27 AM

    PHP 컬에서 쿠키를 설정하는 방법: 1. PHP 샘플 파일을 생성합니다. 2. "curl_setopt" 함수를 통해 cURL 전송 옵션을 설정합니다. 3. CURL에 쿠키를 전달합니다.

    PHP 치명적인 오류에 대한 해결 방법: 정의되지 않은 함수 컬_setopt() 호출 PHP 치명적인 오류에 대한 해결 방법: 정의되지 않은 함수 컬_setopt() 호출 Jun 23, 2023 am 08:18 AM

    PHP는 많은 웹사이트에서 널리 사용되는 오픈 소스 스크립팅 언어입니다. 그러나 때로는 웹사이트가 제대로 작동하지 못하게 할 수 있는 PHPFatalerror:Calltoundefoundfunctioncurl_setopt() 문제가 발생할 수 있습니다. 그렇다면 이 문제의 원인은 정확히 무엇입니까? PHP에서 컬_setopt()는 매우 중요한 함수로, 컬을 통해 라이브러리를 확장하는 데 사용됩니다.

    See all articles