Thảo luận kỹ thuật về cào dữ liệu (crawling bot)

Discussion in 'Hỏi Đáp Kỹ Thuật' started by command, Jan 19, 2019.

  1. huy hoang

    huy hoang Khách Qua Đường

    Mọi người cho mình hỏi là làm sao có thể lấy dữ liệu từ những trang cần đăng nhập.

    Mình đang xử dụng curl của php để xử lý phần đăng nhập.

    Cho mình hỏi là phần curl của mình cần phải sửa lại những gì để lấy được dữ liệu ở trang 'teamlink.vn/scouters/trang-cua-toi'

    Code:
    $url = 'teamlink.vn/scouters/trang-cua-toi';
    $curl = curl_init();
    curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'teamlink.vn/loginmodal',
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
    CURLOPT_POST => 1,
    CURLOPT_TIMEOUT => 30000,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_SSL_VERIFYPEER => false, //Bỏ kiểm SSL
    CURLOPT_COOKIEJAR => 'cookie.txt',
    CURLOPT_XOAUTH2_BEARER => 'To5OOh8vgGnkFTiyLlmRIxb1Tjf42NMOva9DRmAv',
    CURLOPT_POSTFIELDS => array(
    '_token' => 'To5OOh8vgGnkFTiyLlmRIxb1Tjf42NMOva9DRmAv',
    'email' => '',
    'password' => ''
    )
    ));

    $resp = curl_exec($curl);
    $err = curl_error($curl);
    curl_close($curl);
    print_r($resp);
    exit();

    Kết quả:
    The page has expired due to inactivity.

    Please refresh and try again.
     
  2. Dung Vuong

    Dung Vuong Sơ Nhập Giang Hồ

    CURL dùng để crawl mấy trang bắt đăng nhập khá khoai. Crawl mấy trang dễ dễ thì chạy ok. Còn mấy trang đăng nhập với verify thì phải dùng kĩ thuật khác. Mình hay dùng Imacros hoặc code exntention Chorme....Còn các cao nhân khác ở đây thì người dùng python, người dùng selinium...
     
  3. huy hoang

    huy hoang Khách Qua Đường

    Hiện tại thì mình sử dụng laravel nên chỉ biết mỗi thằng curl của php, còn mấy thằng kìa thì mình ko rành lắm
     
  4. Dung Vuong

    Dung Vuong Sơ Nhập Giang Hồ

    Mình dùng thằng CURL này khá nhiều. Và càng ngày càng thấy nó cùi bắp. Mấy site mình crawl dùng CURL toàn bị chặn. Laravel bản chất nó cũng là CURL đóng gói packet vào thôi bác. Nếu chuyên Crawl thì nên tìm thêm công nghệ mới.
     
  5. sincos

    sincos Bang Chúng

    Trình bypass còn thiếu.... nên mới vậy. CURL không phải là 1 công nghệ, nó chỉ là 1 công cụ.
     
    console likes this.
  6. console

    console Bang Chúng

    Đúng haha
     
  7. princenuce

    princenuce Sơ Nhập Giang Hồ

    vẫn phải curl thôi :))))) nên cứ chắc cú nó là được
     
  8. Phan Thị

    Phan Thị Bang Chúng

    PHP:
    $curl curl_init();

    $request_headers = array(
        
    "X-CSRF-TOKEN:425KyjVHeZ0esmfiGTc45INE4bK5yMRIdZj53quU",
        
    "X-Requested-With:XMLHttpRequest"
    );
    curl_setopt_array($curl, array(
        
    CURLOPT_RETURNTRANSFER => 1,
        
    CURLOPT_URL => 'https://teamlink.vn/loginmodal',
        
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
        
    CURLOPT_POST => 1,
        
    CURLOPT_TIMEOUT => 30000,
        
    CURLOPT_CUSTOMREQUEST => 'POST',
        
    CURLOPT_SSL_VERIFYPEER => false//Bỏ kiểm SSL
        
    CURLOPT_COOKIEJAR => 'cookie.txt',
        
    CURLOPT_HTTPHEADER => $request_headers,
        
    CURLOPT_DNS_USE_GLOBAL_CACHE => FALSE,
        
    CURLOPT_DNS_CACHE_TIMEOUT => 2,
        
    CURLOPT_XOAUTH2_BEARER => '425KyjVHeZ0esmfiGTc45INE4bK5yMRIdZj53quU',
        
    CURLOPT_POSTFIELDS => array(
            
    '_token' => '425KyjVHeZ0esmfiGTc45INE4bK5yMRIdZj53quU',
            
    'email' => 'ss',
            
    'password' => 'ss'
        
    )
    ));

    $resp curl_exec($curl);
    $err curl_error($curl);
    curl_close($curl);
    echo 
    $err;
    print_r($resp);
    exit();
     
    huy hoang likes this.
  9. pehuongkoi

    pehuongkoi Tân Thủ Thôn

    Bác nên tìm hiểu qua Python. em từ PHP chuyển qua python để crawl ko muốn quay về thằng PHP nữa
     
  10. huy hoang

    huy hoang Khách Qua Đường

    thanks bạn nha nhưng mà cho mình hỏi 1 chút. Là chỗ phần email với password có cần phải
    urlencode ko

    Chỗ token thì mình xử lý như ở dưới ko biết có đúng ko.

    Còn phần lấy cookie thì mình làm như vậy đúng ko.
    [​IMG]

    Kết quả:
    [​IMG]

    Ah phần quan trọng là mình muốn lấy html trang này teamlink.vn/scouters/trang-cua-toi. Có cách nào khi xử lý xong phần đăng nhập thì nó direct qua trang này dc ko bạn.
    PHP:
    $urlkey 'https://teamlink.vn/';
    $gethtml file_get_html($urlkey);
    $keygen $gethtml->find('input[name=_token]'0);
    $key $keygen->attr['value'];

    $cookie '_ga=GA1.2.24755889.1549945211; __zi=2000.Ve_lxOO119eyaE_wcKHRrpcHxlgLHboQC9Jjlvr7NP4vakkqCW.1; _gid=GA1.2.942603382.1566899436; _gat_gtag_UA_125591340_1=1; XSRF-TOKEN=eyJpdiI6Ilp4SGxYSCs1U1grUDZEVDh3Z2tRU0E9PSIsInZhbHVlIjoiVExRQTlrM2VScDJNQVl6a3hQVDRcL0h1NWxTUXdjQmJnRlhwWlwvRFwvM1BsQlFpVXNLSElqdzZNTlVnSVpXcGt5bCIsIm1hYyI6IjI5NDE3MDhhMTg3ZTRiYTI1OTZmZDRjYzE5M2MwZWIzZDMxNGFiODNmYzg3ZmE4MWYzODJjZTNmYjliOWZkYmEifQ^%^3D^%^3D; scouter_session=eyJpdiI6IlNcLys2bmdzbjREaTBwUTEwWFJrb2VnPT0iLCJ2YWx1ZSI6InpOdFR5V1o5MmJYQmlZZ3JFeUg1Z1JCVnBYdkR4MXZ1SnN6VHBwbDlhaTd6ajRicWNJeFA3Skp1cFFockJTMUEiLCJtYWMiOiJlOTY2YjQ0ZTVkOTg4YTE4YWQ0MmQ2ZmFjNjMwYjc5OWU5OTFkZDdkZTE2YzMyZTg0NTczZjY4ZmU2MDNjYTMyIn0^%^3D; fpsend=145097';

    $curl curl_init();

    $request_headers = array(
    "X-CSRF-TOKEN:" $key,
    "X-Requested-With:XMLHttpRequest"
    );
    curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'https://teamlink.vn/loginmodal',
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
    CURLOPT_POST => 1,
    CURLOPT_TIMEOUT => 300,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_SSL_VERIFYPEER => false//Bỏ kiểm SSL
    CURLOPT_COOKIEJAR => $cookie,
    CURLOPT_HTTPHEADER => $request_headers,
    CURLOPT_DNS_USE_GLOBAL_CACHE => FALSE,
    CURLOPT_DNS_CACHE_TIMEOUT => 2,
    CURLOPT_XOAUTH2_BEARER => $key,
    CURLOPT_POSTFIELDS => array(
    '_token' => $key,
    'email' => '',
    'password' => ''
    )
    ));

    $resp curl_exec($curl);
    $err curl_error($curl);
    curl_close($curl);
    echo 
    $err;
    print_r($resp);
    exit();
     
    Last edited: Aug 29, 2019
  11. huy hoang

    huy hoang Khách Qua Đường

    mình ko biết sao ko post hình được
    cách lấy cookie
    upsieutoc.com/image/LG1ryq
    kết quả
    upsieutoc.com/image/LG1dzw
     
  12. huy hoang

    huy hoang Khách Qua Đường

    Sau 1 hồi tìm hiêu thì mình có check được là lỗi ở trên là do ko gửi đúng token của laravel general trong form nên nó báo lỗi.

    Minh vô page = 2 trình duyệt khác nhau, mình copy token của thằng này thay = thằng kia nhấn submit thì báo lỗi tương tự như lúc mình crawl data.

    Vậy cho mình hỏi cách lấy token như của mình đúng ko

    PHP:
    $urlkey 'https://teamlink.vn/';
    $gethtml file_get_html($urlkey);
    $keygen $gethtml->find('input[name=_token]'0);
    $key $keygen->attr['value'];
    Có j mong "Trưởng lão" hồi đáp =))
     
  13. rugbikk

    rugbikk Tân Thủ Thôn

    Mình thấy thằng CURL này ngon mà , bị chặn thì dùng thêm proxy + random user agents{big_smile} riêng mấy site mà content được write bằng js thì lại dùng cách khác {confident}
     
  14. Nai

    Nai MiddleMan Staff Member

    Mấy web bị chặn ddos bởi CF thì giải quyết sao đây các bác. Lần đầu dính 1 site, may mà dùng wp nên làm tay kết hợp được :D
     
  15. Hoa Mãn Lâu

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

    Chặn bằng cf kiểu gì?
     
  16. Phan Thị

    Phan Thị Bang Chúng

    Search trên github cả đống
     
    Nai likes this.
  17. Thanh Nguyen

    Thanh Nguyen Bang Chúng

    Nhiều thì nhiều thật nhưng có dùng được đâu cụ. Nó mà thêm cả phần recaptcha nữa thì bó tay luôn
     
  18. sincos

    sincos Bang Chúng

    Vào CF > security > Security Level > I'm under attack!
     
  19. Nai

    Nai MiddleMan Staff Member

  20. Phan Thị

    Phan Thị Bang Chúng

    Cái dùng captcha thì hơi khoai đó. còn nếu chỉ chặn kiểu checking 5s thì qua nhiều mà