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:
function img($url){
$curl = curl_init($url);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_BINARYTRANSFER, 1);
$data= curl_exec ($curl);
curl_close ($curl);
return $data;
}
?>
Copy code
hàm get html:
function grab($url){
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_USERAGENT, "Mozilla/17.0");;
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
$data= curl_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:
//khai báo hàm đã
function img($url){
$curl = curl_init($url);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_BINARYTRANSFER, 1);
$data= curl_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
//khai báo hàm đã
function img($url){
$curl = curl_init($url);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_BINARYTRANSFER, 1);
$data= curl_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à
//khai báo hàm đã
function grab($url){
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_USERAGENT, "Mozilla/17.0");;
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
$data= curl_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
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
$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
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
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:
<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
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é
//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
<style>
body{
max-width:600px;
margin: auto;
}
</style>
<h1>tool leech by princenuce</h1>
<?php
function get($url){
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_USERAGENT, "Mozilla/17.0");;
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_ENCODING, "");
$data= curl_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 ở
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