Mong được giải đáp ạ !!! [Crawler Image PHP]

Discussion in 'Hỏi Đáp Kỹ Thuật' started by Newbie88, Apr 27, 2021.

  1. Newbie88

    Newbie88 Tân Thủ Thôn

    Các bro cho em hỏi một chút với ạ:
    + Em đang crawler bằng php simple DOM có nhiều trang load img bằng js không lấy được ảnh hoặc load được image nhưng k get được. Mong ae cho xin cách khắc phục hoặc giải pháp khác hay hơn với ạ. Em cảm ơn nhiều
     
    mrhieubg123 likes this.
  2. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Bắt http request của nó rồi giả lập lại theo nó khi nó down image rồi down về thôi
     
    Newbie88 likes this.
  3. Newbie88

    Newbie88 Tân Thủ Thôn

    giả lập như thế nào vậy bác, chỉ e với ạ
     
  4. sincos

    sincos Bang Chúng

    Đưa site lên đây. 1’30”
     
    Newbie88 likes this.
  5. Newbie88

    Newbie88 Tân Thủ Thôn

    đây bác :D: http:// truyentranhtuan.com/van-gioi-tien-tung-chuong-355/
    hoặc https:// truyendep.com/nguyen-ton-chap-310/
    Em đang crawler ở local, tiện a cho e hỏi luôn nơi lưu ảnh nào hợp lý nhất ạ, e chưa có giải pháp :(
     
  6. sincos

    sincos Bang Chúng

    Hàng đây:

    PHP:
    <?php
    function curl_request($url$options false$cache_key false)
    {
        if(
    $cache_key && file_exists('cache/'.$cache_key.'.txt')) return file_get_contents('cache/'.$cache_key.'.txt');

        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL$url);
     
        if(isset(
    $options->user_agent))
        {
            
    $user_agent $options->user_agent;
        }
        else
            
    $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0';

        
    curl_setopt($chCURLOPT_USERAGENT$user_agent);
     
        if(!empty(
    $options->headers) && is_array($options->headers)) curl_setopt($chCURLOPT_HTTPHEADER$options->headers);
        if(!empty(
    $options->referrer)) curl_setopt($chCURLOPT_REFERER$options->referrer);

        if(!empty(
    $options->post_data))
        {
            
    curl_setopt($chCURLOPT_POST1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$options->post_data);
        }
        
    curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);

        
    $result curl_exec($ch);
     
        
    curl_close($ch);

        if(
    $cache_keyfile_put_contents('cache/'.$cache_key.'.txt'$result);

        return 
    $result;
    }


    $page_url 'http://truyentranhtuan.com/van-gioi-tien-tung-chuong-355/';

    $html curl_request($page_url);
    // echo $html; exit();

    $json preg_match('/var slides_page_path = (?<json>[^;]+);/'$html$matched) ? $matched['json'] : '';
    // echo $json; exit();

    $array_images json_decode($json);
    // print_r($array_images); exit();

    foreach($array_images as $index_image => $image_url)
    {
        echo 
    $image_url."\n";
        
    $arr explode('/'$image_url);
        
    $image_filename end($arr);
        
    file_put_contents($image_filenamecurl_request($image_url));
    }

    exit(
    '--- DONE ---');
    Video múa phím...... trong video có 1 đoạn code thừa download hình 2 lần....mình đã xóa rồi.

     
    Last edited: Apr 27, 2021
    Nai, EDM, wpresources and 6 others like this.
  7. Newbie88

    Newbie88 Tân Thủ Thôn

    A cho e hỏi thêm một chút ạ, e dùng command của laravel để crawl tốc độ rất chậm, a có biết giải pháp nào nhanh hơn k ạ
     
  8. sincos

    sincos Bang Chúng

    code lụi như ở trên. Bao nhanh!!!
     
    huvo6789 likes this.
  9. Tusupper

    Tusupper Tân Thủ Thôn

    Bác sincos múa máy ghê quá, bái phục
     
  10. Newbie88

    Newbie88 Tân Thủ Thôn

    dùng fuction trên có thể get từ trang chủ cho đến các trang con k a nhỉ
     
  11. mrhieubg123

    mrhieubg123 Khách Qua Đường

    triệu like cho bác {beauty}{beauty}{beauty}
     
  12. fkphua

    fkphua Tân Thủ Thôn

    Thêm vòng for duyệt link con nữa
     
  13. sincos

    sincos Bang Chúng

    Để viết hẳn hoi 1 con crawler thì cần làm nhiều thứ như: database, check duplicated, mapping category..........

    Lưu ý mấy công việc crawl này nó thường nặng vì sử lý một lúc cả tá url, images, pages..... nên viết riêng dưới dạng 1 tool và chạy thông qua commandline.... không nên viết dạng web tool vì webserver giới hạn timeout cũng như php sẽ bị giới hạn bởi time_execute.
     
    Newbie88 and tungbo@ like this.
  14. rugbikk

    rugbikk Tân Thủ Thôn

    Thím có thể dùng kết hợp laravel queue + supervisor để crawl nhiều pages cùng 1 lúc {adore}{adore}
    p/s: Thím crawl ở local mà chậm thì check lại mạng nhà thím thử coi, không thì thử upload source lên 1 con vps rồi crawl {ah}{ah} nhớ kiểm tra lúc chạy command thì cpu, ram có bị overload ko, nếu có thì check lại code để optimize nó {ah}{ah}
     
    Last edited: Apr 28, 2021
    Newbie88 likes this.
  15. fkphua

    fkphua Tân Thủ Thôn

    PHP k crawl đc ajax vậy đâu , trừ khi nó có request theo method GET , bác học python code mấy dòng cho nhanh
     
    Newbie88 likes this.
  16. xmenvn2510

    xmenvn2510 Moderator + MiddleMan Staff Member

    Hướng dẫn chi tiết quá với 1 site cụ thể, mình thấy ko nên.
    Vô tình chủ site đó vào đây thì ko hay lắm. Lúc đó chủ site lại thay đổi layout thì mệt.

    Hãy pm riêng thì hay hơn bạn à.
    Chỉ nên nói đại ý để bạn đó tìm hiểu. Bạn chủ topic phải học và tự đào sâu. Kiến thức sẽ chắc. Còn chi tiết làm thì để bạn chủ topic thuê đi. Hoặc donate cho thì đẹp. :D
     
    Newbie88 and sincos like this.
  17. tienganhtiengem

    tienganhtiengem Sơ Nhập Giang Hồ

    Sư phụ sincos . cho em dc rót nước chè :d {band}
     
    Newbie88 and wpresources like this.
  18. snowman2

    snowman2 Tân Thủ Thôn

    Newbie88 likes this.
  19. sincos

    sincos Bang Chúng

    TÀO LAO!!!

    Mấy bạn trẻ này bị phụ thuộc quá rồi. Mấy cái này chưa cần đến dao mổ trâu đâu.
    --- Double Post Merged, May 16, 2021, Original Post Date: May 16, 2021 ---
    Ajax thì cũng chỉ là request thôi. Biết bật dev tool là thấy rồi. Chỉ get về rồi parse như ví dụ trước thôi.

    Còn bận kiếm tiền quá thì nên như bác @xmenvn2510 nói.
     
    Newbie88 and mrhieubg123 like this.
  20. fkphua

    fkphua Tân Thủ Thôn

    Tất nhiên fake request như bác nói thì vẫn get đc , nhưng sao phải khổ dâm vậy ạ . Trong khi code python dễ ( tụi con nít toàn học nó ) chứ có phải khó đâu .