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 Viết 1 Code Get Bài Viết Từ A-z
Xuống dưới » Hướng Dẫn Viết 1 Code Get Bài Viết Từ A-z
avatar by Pham_loi Pham_loi
Chức vụ:
21:26:05, 22-08-2015


Phần 1: Mở đầu
Phần 2: Grab có phân trang
Phần 3: Tạo form nhập link để get
Phần 4: Get link bài viet trong chuyênmục
Phần 5: Kết hợp phần 3 và phần 4
Phần 6: Insert data
Phần 7: Code demo và lời kết

Các bạn theo dõi lại seri này ở đây nhé http://zinghay.mobi/forum/huong-dan-grab-va-viet-tool-leech-toan-tap/434.html
Nguồn: daivietpda


Chỉnh sửa lúc 2016-02-22 00:18 bởi Pham_loi
Like: 0
avatar by Pham_loi Pham_loi
Chức vụ:
00:02:15, 22-02-2016

Cái thể loại này chỉ dành cho các bác lười post bài thôi, với lại mình viết ra cho các bạn đọc hiểu là chính chứ mình không khuyến khích việc này lắm :D, À cũng tiện cu @[USER=40731nsteen net[/USER nó kêu viết lại nên mình viết lại, dự là có nhiều phần khác nhau nên mình sẽ tiện khi nào rảnh thì viết tiếp, trước bác @[USER=4276k3ng1991[/USER mình nhớ có bảo dạy grab gì đó bên thudau.com hay sao í mà k thấy :D. trước tiên mình hướng dẫn grab trước, biết grab rồi thì insert data chỉ là chuyện nhỏ :D
Để dễ hiêu ta sẽ làm với file_get_contents () trước nhé
cách dùng như sau
<?
echo file_get_contents ('https://daivietpda.vn');
?>

Copy code

các bạn thử lưu code trên vào file test.php r chạy thử coi nhé.
để lấy được các html thì mình sẽ lưu kết quả trả về của hàm vào 1 biến như sau
<?
$ketqua = file_get_contents ('https://daivietpda.vn');
echo $ketqua;
?>

Copy code

uhm bây giờ ta có được kết quả vậy r thì ta sẽ thực hiện các thao tác khác để lấy được cái mình muốn từ bộ html mình nhận được
bay giờ mình sẽ lấy trang doctruyen360.com để làm ví dụ nhé, cụ thể hơn là trang này
[URL='http://www.doctruyen360.com/danh-sach-truyen-ngan-hay-truyen-ngan-tinh-yeu/'http://www.doctruyen360.com/danh-sach-truyen-ngan-hay-truyen-ngan-tinh-yeu/[/URL
code như này
<?
$ketqua = file_get_contents ('http://www.doctruyen360.com/danh-sach-truyen-ngan-hay-truyen-ngan-tinh-yeu/');
echo $ketqua;
?>

Copy code

rồi mình sẽ lấy các link trên trang đó nhé, ở đây mình dùng lớp hàm preg_ mà cụ thể là preg_match_all()
Chú ý 1 chút mình thấy rằng các link nó đều có dạng
<a title="nội dung1" href="nội dung2">nội dung 3</a>
vậy là ta chỉ cần code như sau
preg_match_all ('#<a title="(.+?)" href="(.+?)">(.+?)</a>#',$ketqua,$danhsachlink);
Copy code

ok, chạy thử nào
<?
$ketqua = file_get_contents ('http://www.doctruyen360.com/danh-sach-truyen-ngan-hay-truyen-ngan-tinh-yeu/');
preg_match_all ('#<a title="(.+?)" href="(.+?)">(.+?)</a>#',$ketqua,$danhsachlink);
?>
<pre><?print_r ($danhsachlink);?></pre>

Copy code

nếu bạn chạy code trên nó sẽ ra 1 mớ loằng ngằng nhưng sẽ có dạng cố định như sau

array có key = 0 nó chứa các link dạng
<a title="nội dung1" href="nội dung2">nội dung 3</a>
array có key = 1 nó chứa các nội dung 1
array có key = 2 nó chứa các nội dung 2
array có key = 3 nó chứa các nội dung 3
nếu bạn muốn in cái nào ra chỉ cần sửa ở đây (giả sử mình muốn in ra nôi dung 2 là các link )

<?
$ketqua = file_get_contents ('http://www.doctruyen360.com/danh-sach-truyen-ngan-hay-truyen-ngan-tinh-yeu/');
preg_match_all ('#<a title="(.+?)" href="(.+?)">(.+?)</a>#',$ketqua,$danhsachlink);
?>
<pre><?print_r ($danhsachlink[2);?></pre>

Copy code

bạn hãy chú ý số 2 nhé, bạn thay số nào tùy thích.
vây hôm nay đến đây thôi, hôm sau mình post tiếp :D

Like: 0
avatar by Pham_loi Pham_loi
Chức vụ:
00:04:59, 22-02-2016

Tiếp cho bài viết nè, như ở phần 1 ta biết được grab 1 trang là ntn r nhỉ, nói sơ thêm cho phần 1, nếu bạn muốn lấy nội dung bài viết chẳng hạn không phải link như ở kia thì ta cũng sẽ dùng preg_ để lấy nó ra thôi, mình cũng muốn các bạn chú ý và tìm hiểu về lớp hàm preg_ để sau này mình viết ra các bạn sẽ dễ hiểu hơn, tại sao mình muốn các bạn nên tìm hiểu preg_ vì nó khá dễ dùng và nhiều lựa chọn, bóc tách nội dung cũng tuyệt vời, kết quả trả vào mảng nên khá dễ dàng xử lí :D. đơn giản mình lấy link này làm ví dụ nè,
http://www.doctruyen360.com/do-khon-sao-de-toi-nho-cau-chuong-73/
nếu bạn không có pc mà muốn xem source cho nhanh bạn hãy làm như sau
<?
$ketqua = file_get_contents ('http://www.doctruyen360.com/do-khon-sao-de-toi-nho-cau-chuong-73/');
echo htmlentities($ketqua,ENT_QUOTES,'UTF-8');
?>

Copy code

lưu code trên vào file nào đó r chạy thì sẽ nhận được bộ mã html. ok có mã html r thì ta sẽ xem xét coi nội dung nó nằm từ chỗ nào đến chỗ nào, mình nhận thấy nội dung nó nằm từ thẻ<div class="dtct1072"> đến <div id="fcbk_share">
và các thẻ ấy đều chỉ có 1 thôi, 1 ở đây là trên bộ mã html mình chỉ thấy có duy nhất thẻ ấy, muốn biết có duy nhất hay không trên máy tính bạn bôi đen thẻ ấy r nhấn ctrl + c rồi nhấn ctrl + f rồi nhấn ctrl + v rồi enter sẽ thấy số kết quả ở góc trên bên phải
ok mình sẽ làm 1 biểu thức so mẫu để lấy nội dung ra bằng hàm preg_match
preg_match ('#<div class="dtct1072">(.+?)<div id="fcbk_share">#s',$ketqua,$noidung);
Copy code

rồi, code hoàn chỉnh sẽ là
<?
$ketqua = file_get_contents ('http://www.doctruyen360.com/do-khon-sao-de-toi-nho-cau-chuong-73/');
preg_match ('#<div class="dtct1072">(.+?)<div id="fcbk_share">#s',$ketqua,$noidung);
echo $noidung[1;
?>

Copy code

vậy là đã xong phần 1 tại đây nhé.

Like: 0
avatar by Pham_loi Pham_loi
Chức vụ:
00:06:59, 22-02-2016

phần 2: grab có phân trang
mình lấy topkute.net để làm hướng dẫn nhé
link để ta cùng bàn tới sẽ là http://topkute.net/forum/truyen-teen-buoc-ve-phia-em-full_8444.html
ok đi vào phần chính, trước hết ta sẽ có 2 việc đó là lấy nội dung trên trang và xác định tổng số trang.
để lấy nội dung như thường lệ ta sẽ view source lên và thật tình cờ và thật bất ngờ , nội dung nằm gọn trong <big> </big>. thiết kế ngay function lấy nội dug như sau
function  lay_noi_dung ($html)
{
  preg_match ('#<big>(.+?)</big>#s',$html,$noidung);
  return $noidung[1;
}

Copy code

để lấy tổng số trang ta để ý thấy link các trang khác có dạng <a class="pagenav" ...>số trang </a>, mình chỉ quan tâm cái số trang kia thôi như vậy ta sẽ lấy tất cả cái số trang kia và lấy giá trị lớn nhất làm tổng số trang
function lay_tong_so_trang($html)
{
  preg_match_all('#<a class="pagenav"(.+?)>(.+?)</a>#',$html,$tongsotrang);
return max($tongsotrang[2);
}

Copy code

có thể một số bạn sẽ thắc mắc tại sao khi thì preg_match, khi thì preg_match_all
thì cái này cũng đơn giản, nếu biểu thức so mẫu chỉ có 1 ta sẽ dùng preg_match, nếu có nhiều hơn 1 ta sẽ dùng preg_match_all vậy có thể dùng preg_match_all khi chỉ lấy 1 kết quả k thì xin thưa là có, cho dễ hiểu preg_match_all nó sẽ lấy tất cả chuỗi phù hợp biểu thức so mẫu còn preg_match chỉ lấy 1 kết quả phù hợp đầu tiên nó tìm được.
Như vậy ta đã có trọn ven rồi nhỉ, giờ chỉ việc dùng vòng lặp từ trang 1 đến trang cuối để lấy nội dung thôi,
$url = '....';
$html = file_get_contents ($url);
$tongsotrang = lay_tong_so_trang ($html);
for ($i=1;$i<=$tongsotrang;$i++)
{
  $link = '...trang-' . $i . '.html';
  echo lay_noi_dung ($link);
}

Copy code

như vậy ta hoàn thiện code nhé
function  lay_noi_dung ($html)
{
  preg_match ('#<big>(.+?)</big>#s',$html,$noidung);
  return $noidung[1;
}
function lay_tong_so_trang($html)
{
  preg_match_all('#<a class="pagenav"(.+?)>(.+?)</a>#',$html,$tongsotrang);
return max($tongsotrang[2);
}
$url = 'http://topkute.net/forum/truyen-teen-buoc-ve-phia-em-full_8444.html';
$html = file_get_contents ($url);
$tongsotrang = lay_tong_so_trang ($html);
for ($i=1;$i<=$tongsotrang;$i++)
{
  $link = 'http://topkute.net/forum/truyen-teen-buoc-ve-phia-em-full_8444_trang-' . $i . '.html';
  $htm = file_get_contents ($link);
  echo lay_noi_dung ($htm);
}

Copy code

Like: 0
avatar by Pham_loi Pham_loi
Chức vụ:
00:10:28, 22-02-2016

Phần 3: Tạo form nhập link để get
Phần này mình nghĩ là khá ngắn nên sẽ nói thêm vài cái khác nữa.
như các bạn đã biết hoặc một số chưa rõ thì html tương tác với php qua form, đây là kiến thức cơ bản khi làm việc với php và html. muốn gửi dữ liệu từ form vào cho php xử lí ta có 2 phương thức là post và get, nó như thế nào các bạn có thể google để tìm thêm thông tin, ở đây mình sẽ làm theo phương thức get, và cả sau này ta cũng sẽ sử dụng phương thức này.
rất đơn giản thôi ạ, bạn tao 1 form với 1 ô nhập link và nút submit, thuộc tính name của thẻ input nhập link mình đặt là link.
<form method="get">
Nhập link: <input name="link">
<input type="submit">
</form>

Copy code

trên đây là phần html, đến phần php ta sẽ dùng biến môi trường $_GET để lấy giá trị gửi lên từ form, lưu ý vì method trong form là get nên ta sẽ dùng $_GET. còn nếu method là post thì ta dùng $_POST.
<form method="get">
Nhập link: <input name="link">
<input type="submit">
</form>
<?
if (isset ($_GET['link'))
{
$link = $_GET['link';

//code ở đây

}

Copy code

ở đây ta có sử dụng hàm isset() để kiểm tra xem $_GET['link' có giá trị hay chưa, nếu có r thì ta làm tiếp không thì không làm gì, còn làm gì tiếp thì ta sẽ quan tâm sau.
vậy để dễ hình dung bạn hãy lưu code sau thành 1 file .php và chạy thử coi như thế nào nhé.
<form method="get">
Nhập link: <input name="link">
<input type="submit">
</form>
<?
if (isset ($_GET['link'))
{
$link = $_GET['link';

echo $link;

}

Copy code

ở phần 2 ta đã có được code lấy nội dung có phân trang, code nó như này
function  lay_noi_dung ($html)
{
  preg_match ('#<big>(.+?)</big>#s',$html,$noidung);
  return $noidung[1;
}
function lay_tong_so_trang($html)
{
  preg_match_all('#<a class="pagenav"(.+?)>(.+?)</a>#',$html,$tongsotrang);
return max($tongsotrang[2);
}
$url = 'http://topkute.net/forum/truyen-teen-buoc-ve-phia-em-full_8444.html';
$html = file_get_contents ($url);
$tongsotrang = lay_tong_so_trang ($html);
for ($i=1;$i<=$tongsotrang;$i++)
{
  $link = 'http://topkute.net/forum/truyen-teen-buoc-ve-phia-em-full_8444_trang-' . $i . '.html';
  $htm = file_get_contents ($link);
  echo lay_noi_dung ($htm);
}

Copy code

để ứng dụng những cái nói nãy giờ ở trên và code kia ta sẽ chỉ quan tâm đến cái $url trong code trên thôi, thay vì ở phần 2 ta sẽ phải sửa $url mỗi khi muốn grab 1 trang khác thì bây giờ chỉ việc nhập link vào form nhấn nút thì ta sẽ cho $url = $_GET['link' là coi như giải quyết xong :D. còn cái nhỏ này nữa, chú ý dòng này $link = 'http://topkute.net/forum/truyen-teen-buoc-ve-phia-em-full_8444_trang-' . $i . '.html';
ta sẽ để ý các link đều kết thúc bằng .html và số page nó nằm sát .html ấy đồng thời có cấu trúc cố định là ......_id_trang-số trang.html, ta dùng preg_replace để xử lí cái đuôi cho nó chuẩn là dc thôi mà.
vậy code hoàn chỉnh như sau
<form method="get">
Nhập link: <input name="link">
<input type="submit">
</form>
<?

if (isset ($_GET['link'))
{
$url = $_GET['link';

function  lay_noi_dung ($html)
{
  preg_match ('#<big>(.+?)</big>#s',$html,$noidung);
  return $noidung[1;
}
function lay_tong_so_trang($html)
{
  preg_match_all('#<a class="pagenav"(.+?)>(.+?)</a>#',$html,$tongsotrang);
return max($tongsotrang[2);
}
$html = file_get_contents ($url);
$tongsotrang = lay_tong_so_trang ($html);
for ($i=1;$i<=$tongsotrang;$i++)
{
  $link = preg_replace('#.html$#','_trang-' . $i . '.html',$url);
  $htm = file_get_contents ($link);
  echo lay_noi_dung ($htm);
}


}

Copy code

Like: 0
avatar by Pham_loi Pham_loi
Chức vụ:
00:13:33, 22-02-2016

Phần 4: Get link bài viet trong chuyên mục

Hi all member!, lâu lắm rồi mới rảnh được chút nên định sẽ hoàn thành nốt seri này cho các bạn.!
Bài này ta sẽ quan tâm đến vấn đền Get link bài viết trên chuyên mục có phân trang.
uhm ta lấy một ví dụ đơ giản như này http://topkute.net/forum/truyen-ngan_180.html
:D, ờ thì mình sẽ đi vào phân tích 1 chút nhé. khi nhấp vào 1 rang khác thì link nó có dạng như sau http://topkute.net/forum/index.php?id=180&page=3, ngon rầu, với loại này ta chỉ việc thay cái chỉ số sau $page=[chỉ số là ta sẽ có 1 trag khác, tuy nhiên vì nó dễ thế nên ta bỏ đó đã, trước tiên phải lấy được link trên trang đó.
viewsource lên coi thấy link nó nằm theo kiểu như này
<td><a href="http://topkute.net/forum/truyen-ngan-rang-khenh_8646.html" title="Truyện ngắn - Răng khểnh">Truyện ngắn - Răng khểnh</a><br> Lượt xem: 236</td>
vậy ta thiết kế function lấy link như sau
function get_link_category($html)
{
preg_match_all('#<td><a href="(.+?)"#',$html,$link);
return $link;
}

Copy code

quay lại với cái kia ngó qua thấy tổng số page nó là 94 vậy là xong, lặp và lặp nào
function get_link_category($html)
{
preg_match_all('#<td><a href="(.+?)"#',$html,$link);
return $link;
}
for($i=1;$i<95;$i++)
{
$catlink = 'http://topkute.net/forum/index.php?id=180&page=' . $i;
$htm = file_get_contents($catlink);
$list[ = get_link_category($htm);
}
print_r($list);

Copy code

xong rồi đó :D


Chỉnh sửa lúc 2016-02-22 00:20 bởi Pham_loi
Like: 0
Lên trên  Tổng số: 6







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