XtGem Forum catalog
logo

Chatbox|Admin nhận làm wap/web, giá cả thương lượng... Thông tin admin tại mỗi bài viết.
Home · Bang hội ·
* Đăng Nhập hoặc Đăng Kí
để sử dụng hết chức năng của diễn đàn.
Hi, Khách!
HomeBang hội » Wapmaster » PHP » Hướng Dẫn Grab + Làm Tool Leech Bằng CURL Part 1 by princenuce
Xuống dưới » Hướng Dẫn Grab + Làm Tool Leech Bằng CURL Part 1 by princenuce
avatar by Pham_loi Pham_loi
Chức vụ:
01:20:00, 24-02-2016

Thực ra cũng dễ thôi, chả có gì bí ẩn cả
trước tiên mình sẽ đưa cho các bạn 2 hàm dùng để lấy nội dung bằng curl, với 2 hàm này bạn có thể thoải mái dùng mà không cần chỉnh sửa nhiều
hàm get ảnh:
<?php
function img($url){
$curl curl_init($url);
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_BINARYTRANSFER1);
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
?>

Copy code

hàm get html:
<?php
function grab($url){
$curl curl_init();
curl_setopt ($curlCURLOPT_URL$url);
curl_setopt ($curlCURLOPT_USERAGENT"Mozilla/17.0");;
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
?>

Copy code

giờ ta đã có 2 hàm quan trọng rồi, bây giờ việc cần làm là áp dụng nó để phục vụ ae ta
đối với hàm get ảnh bạn dùng như sau:
<?php
//khai báo hàm đã
function img($url){
$curl curl_init($url);
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_BINARYTRANSFER1);
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
//nếu bạn muốn leech 1 bức ảnh nào đó để xem luôn
header ('Content-type: images/jpeg');//lệnh header báo cho trình duyệt sẽ nhận ảnh với định dạng jpeg
$buc_anh img ('link ảnh');
print (
$buc_anh);
?>

Copy code

<?php
//khai báo hàm đã
function img($url){
$curl curl_init($url);
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_BINARYTRANSFER1);
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
//nếu bạn muốn leech và lưu vào thư mục nào đó, chẳng hạn images
$url 'link ảnh';
$buc_anh img (url);
@
mkdir('images',0777);
$op fopen ('images/' basename ($url),'wb');//mở một file với tên của bức ảnh trong thư mục images
fwrite ($op,$buc_anh);//chép nội dung bức ảnh vào file được mở ở trên
fclose ($buc_anh);// đóng file lại
echo '<img src="images/' basename ($url) . '">';//xuất bức ảnh để xem
?>

Copy code

ok, cơ bản là thế,
đến lượt thằng kia
thằng này đơn giản là nó lấy về source html của wap/web
thôi nói nhanh cho nó vuông là
<?php
//khai báo hàm đã
function grab($url){
$curl curl_init();
curl_setopt ($curlCURLOPT_URL$url);
curl_setopt ($curlCURLOPT_USERAGENT"Mozilla/17.0");;
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}
$link 'link trang muốn xem';
$html $grab ($link);
//thích xem không? có à, đây nè
echo $html;
?>

Copy code

điều khác nhau cơ bản của 2 hàm trên là lệnh
curl_setopt ($curl, CURLOPT_BINARYTRANSFER, 1);
lệnh này thông báo cho curl biết rằng dữ liệu lấy về là binary, dễ hiểu là nó không phải dạng text, dạng text là những thứ như txt, css, html, xml, xhtml .....
ok, chỉ cần biết thế thôi, nói nữa lại lù tù mù mất
bây giờ mình sẽ lấy 1 tool mình viết sẵn ra để phân tích cho anh em nhá , đây là tool leech của kenh14.vn chuyên mục góc trái tim(cái này mới làm có người hỏi nên nói luôn);


dĩ nhiên là vẫn có 2 hàm trên nhé, sau đây mình thêm một số hàm cần thiết cho việc xử lý nội dung, mình sẻ cố gắng nói kĩ từng hàm cho ae
khi xem 1 link bài viết chẳng hạn
http://kenh14.vn/goc-trai-tim/vi-em-nhu-the-day-201354215645186.chn
mình view source nó lên và xem xét thấy có cái này

<h2 class="sapo">
  Vì em không dịu dàng, nữ tính nên ở bên em, anh không có được cảm giác che chở cho người mình yêu thương..

</h2>

Copy code




nó là câu nhấn màu đậm trên bài viết ấy, nó là một phần của bài viết nên mình sẽ tách câu ấy ra bằng hàm sau
<?php
$link 
'http://kenh14.vn/goc-trai-tim/vi-em-nhu-the-day-201354215645186.chn';
$data grab ($link);
//hàm lấy câu nhấn trên một bài viết
function get_h2 ($data){
//biến $data là biến nguồn đưa vào có được bằng cách dùng hàm grab nhu trên
//trong biến này là mã html của trang ấy
preg_match_all('#<h2\sclass=\"sapo\">(.+?)</h2>#is',$data,$h2);// đây là câu regex thuần thúy
//ý nghĩa: tìm trong biến $data tất cả những cụm từ nằm giữa <h2\sclass=\"sapo\"> và</h2>
//rồi lưu vào biến $h2
//lúc này $h2 nó là một biến mảng 2 chiều với giá trị mình cần lấy nằm ở mảng $h2[1 phần tử có
//khóa là 0 tức là chuỗi nhấn nằm trong biến $h2[1[0
//mình trả lại giá trị chuỗi vào hàm để tí còn lấy [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img
    
return($h2[1[0);
}
}
?>

Copy code

xong, phù, mình viết văn kém nên mong ae ráng vậy

// đây là hàm lấy nội dung chính bài viết
//vẫn giống trên thôi mình tìm được nội dung nó nằm trong đoạn từ <div\sclass=\"content\">
//đến <script nên mình làm một đoạn regex giống hệt cấu trúc bên trên chỉ thay mỗi 2 điểm bắt đàu
//đến kết thúc
<?php
function get_div ($data){
preg_match_all('#<div\sclass=\"content\">(.+?)<script#is',$data,$div);
//chú ý ở đây mình dùng hàm trim() , thực ra không dùng củng chẳng sao )
return trim($div[0[0,'\n\r');
}
}
?>

Copy code

đến hàm này
<?php
function get_h1 ($data){
//nhiệm vụ của nó là lấy tiêu đề bài viết, cấu trúc hoàn toàn giống 2 thằng trên
preg_match_all('#<h1\sclass=\"title\">(.+?)</h1>#is',$data,$h1);
return(
$h1[1[0);
}
?>

Copy code

vậy là mình đả lấy thành công nội dung rồi ha, vấn đề là bây giờ sẻ lấy danh sách các link bài viết trên một trang như thế nào, giả sử ở link http://kenh14.vn/goc-trai-tim/trang-3.chn
mình lại viewsource nó và nhận thấy đoạn mã chứa link luôn có dạng ntn:
<?php
<div class="img ">
<
a title="Gió nghịch mùa"
href="/goc-trai-tim/gio-nghich-mua-201342611553170.chn">
<
img title="Gió nghịch mùa" alt="Gió nghịch mùa"
src="http://k14.vcmedia.vn/thumb_w/600/gCsVfdir6nKzzfyaqMLKcccccccccc/Image/2013/04/love1avar-f1343.jpg" />
<
span class="icon"></span></a>
</
div>
?>

Copy code


như vậy mình sẽ tách lấy mỗi cái link đậm, chính là link bài viết, ok mình có hàm
<?php
function get_link ($data) {
//khởi tạo 1 mảng $arr
$arr = array ();
//câu regex thuần túy để tách đoạn code chứa link bài viết và lưu vào biến $a,
//nhớ nhé, biến được tạo ra bởi hàm preg_match_all thì nó luôn là một mảng, tức là ở đây ta có $a là biến mảng
preg_match_all('#<div\sclass=\"img\s\">(.+?)</div>#is',$data,$a);
foreach (
$a[0 as $val) {
//mình dùng hàm foreach để lặp các đoạn code ra và dumgf regex lần 2 để tách link ra lưu và $b rrooif gán link vào cho $arr[;
preg_match_all('#href=\"(.+?)\"#is',$val,$b);
$arr[ = $b[1[0;
}
//xong thì trả lại giá trị cho hàm
return $arr;
}
?>

Copy code

vậy là đả hết hàm rồi nhỉ, bây giờ đến code điều khiển nhé
<?php
//mình dung phương thức get để lấy trang bạn muốn leech
$page $_GET['page';
if (
$page == '') {
//kiểm tra nếu $page bằng rỗng thì gán $page = 1;
$page 1;
}
//kiểm tra $page có phỉ số hay không [imghttp://wap-m9x.rhcloud.com/images/smileys/simply/).jpg[/img
if (is_numeric ($page)) {
//bắt đầu code chính nè
// lấy mã html link trang muốn leech rồi gán vào $a
$a get("http://kenh14.vn/goc-trai-tim/trang-$page.chn");
//lấy danh sách link bài viết bằng hàm get_link rồi gán vào $b
$b get_link ($a);

foreach (
$b as $c=>$d) {
//lặp biến $b để lấy ra link có dạng /goc-trai-tim/...
//lấy mã html của link rồi gán vào $e
$e get ('http://kenh14.vn' $d);
//xuất ra tiêu đề
echo '<input value="' get_h1 ($e) . '">';
//lấy nội dung bài rồi gán vào biếm $f
$f get_div ($e);
//lọc link ảnh vào bbcode
    
$f preg_replace ('#<img(.+?)src=\"(.+?)\"(.+?)>#i','',$f);
//lọc mã html ra khoi nọi dung và xuất ra
echo '<textarea cols="60" rows="20">' get_h2 ($e) . (strip_tags ($f,'<img>')) . '</textarea><br />';
}
}
//đây là đoạn code để in ra link các trang cho bạn chọn,
echo '<br />chọn trang:<br />';
for (
$i=1$i<=106;$i++){
echo 
'[<a href="k14.php?page=' $i '" target="_blank">' $i '</a>';
}

?>

Copy code

vậy là xong rồi đó, test đi,
ở đây mình không dùng hàm get ảnh vì sợ tốn bw các bạn với lại code sẽ load chậm
code hoàn chỉnh
<meta charset="utf-8" />
<style>
body{
  max-width:600px;
  margin: auto;
}
</style>
<h1>tool leech by princenuce</h1>
<?php
function get($url){
$curl curl_init();
curl_setopt ($curlCURLOPT_URL$url);
curl_setopt ($curlCURLOPT_USERAGENT"Mozilla/17.0");;
curl_setopt ($curlCURLOPT_RETURNTRANSFER1);
curl_setopt ($curlCURLOPT_SSL_VERIFYPEER0);
curl_setopt ($curlCURLOPT_ENCODING"");
$datacurl_exec ($curl);
curl_close ($curl);
return 
$data;
}

function 
get_h2 ($data){
preg_match_all('#<h2\sclass=\"sapo\">(.+?)</h2>#is',$data,$h2);
return(
$h2[1[0);
}
function 
get_h1 ($data){
preg_match_all('#<h1\sclass=\"title\">(.+?)</h1>#is',$data,$h1);
return(
$h1[1[0);
}
function 
get_div ($data){
preg_match_all('#<div\sclass=\"content\">(.+?)<script#is',$data,$div);
return 
trim($div[0[0,'\n\r');
}
function 
get_link ($data) {
$arr = array ();
preg_match_all('#<div\sclass=\"img\s\">(.+?)</div>#is',$data,$a);
foreach (
$a[0 as $val) {
preg_match_all('#href=\"(.+?)\"#is',$val,$b);
$arr[ = $b[1[0;
}
return 
$arr;
}
$page $_GET['page';
if (
$page == '') {
$page 1;
}
if (
is_numeric ($page)) {
$a get("http://kenh14.vn/goc-trai-tim/trang-$page.chn");
$b get_link ($a);

foreach (
$b as $c=>$d) {
$e get ('http://kenh14.vn' $d);
echo 
'<input value="' get_h1 ($e) . '">';
$f get_div ($e);
$f preg_replace ('#<img(.+?)src=\"(.+?)\"(.+?)>#i','[ img $2[ /img ',$f);
echo 
'<textarea cols="60" rows="20">' get_h2 ($e) . (strip_tags ($f,'<img>')) . '</textarea><br />';
}
}
echo 
'<br />chọn trang:<br />';
for (
$i=1$i<=106;$i++){
echo 
'[<a href="k14.php?page=' $i '" target="_blank">' $i '</a>';
}
?>

Copy code

vậy hén, goodluck nhá, không hiểu cm trực tiếp nhóe
ăn cơm đã
còn cái auto vào database thì củng dể, nhưng ae phải biết làm ntn mới hướng dẫ được
p/s: nếu ai dùng code thì hảy đặt tên file là k14.php hoặc sửa link theo tên file bạn đặt cho đúng ở
<?php
echo '<br />chọn trang:<br />';
for (
$i=1;$i<=106;$i++){
echo 
'[<a href=k14.php?page= . $i . '">' . $i . '</a>';
}
?>

Copy code

Nguồn: princenuce

Like: 0
Lên trên  Tổng số: 1







Trực Tuyến: Khách: 1
Diễn đàn teen Việt Nam
CopyRight 2014