Ngu ngơ học làm web (75) - Lấy tin từ dantri.com.vn

Tiếp theo của: Ngu ngơ học làm web (74) - Lấy tin từ Vnexpress
------

Phần 75.       Lấy tin từ dantri.com.vn

Đây là clip số 73_1:


Lấy đoạn mã HTML của một tin trên trang dantri.com.vn, dán vào phần TEST STRING của https://regex101.com/ để xây dựng biểu thức chính quy.

Dưới đây là mã HTML của một tin,

<div data-boxtype="timelineposition" data-posid="635581" data-locked="false" class="mt3 clearfix eplcheck"><a href="/giao-duc-khuyen-hoc/cam-dong-cac-thay-co-giao-nhieu-nam-tinh-nguyen-nau-chao-sang-cho-hoc-sinh-20171117073740343.htm" title="Cảm động các thầy cô giáo nhiều năm tình nguyện nấu cháo sáng cho học sinh"><img title="Cảm động các thầy cô giáo nhiều năm tình nguyện nấu cháo sáng cho học sinh" alt="Cảm động các thầy cô giáo nhiều năm tình nguyện nấu cháo sáng cho học sinh" data-x2="https://dantricdn.com/zoom/130_100/2017/img9122-1510844369131.jpg" src="https://dantricdn.com/zoom/130_100/2017/img9122-1510844369131.jpg" width="130" height="100" class="img130"></a><div class="mr1" data-id="20171117073740343"><h2><a href="/giao-duc-khuyen-hoc/cam-dong-cac-thay-co-giao-nhieu-nam-tinh-nguyen-nau-chao-sang-cho-hoc-sinh-20171117073740343.htm" title="Cảm động các thầy cô giáo nhiều năm tình nguyện nấu cháo sáng cho học sinh" class="fon6" data-newstype="0" data-linktype="newsdetail" data-id="20171117073740343">Cảm động các thầy cô giáo nhiều năm tình nguyện nấu cháo sáng cho học sinh</a></h2><div class="fon5 wid324 fl">(Dân trí) - Nhiều năm qua, các thầy cô giáo Trường Phổ thông dân tộc bán trú Trung học cơ sở (THCS) Trung Thượng, xã Trung Thượng, huyện Quan Sơn (Thanh Hóa) thức khuya, dậy sớm tình nguyện nấu cháo ăn sáng cho các em học sinh bán trú của nhà trường.<br><a href="/giao-duc-khuyen-hoc/giao-vien-lay-tien-luong-mua-gao-cho-hoc-sinh-an-2017012507454859.htm" title="Giáo viên lấy tiền lương mua gạo cho học sinh ăn"><b>&nbsp;&gt;&gt;&nbsp;Giáo viên lấy tiền lương mua gạo cho học sinh ăn</b></a></div><a rel="nofollow" class="icon-detail fon7" href="/giao-duc-khuyen-hoc/cam-dong-cac-thay-co-giao-nhieu-nam-tinh-nguyen-nau-chao-sang-cho-hoc-sinh-20171117073740343.htm">Xem tiếp</a> </div></div>

Tìm được biểu thức chính quy để lấy hình ảnh, tiêu đề và mô tả của các tin trong danh sách:

'/class="mt3 clearfix eplcheck">.*src="(.*)".*class="fon6".*>(.*)<.*fon5 wid324 fl">.*(.*)</ismU'

Đây là clip số 73_2:


Biểu thức chính quy để lấy tin đầu tiên (tin này có cấu trúc khác so với các tin trong danh sách):

'/class="mt3 clearfix".*src="(.*)".*"fon44".*>(.*)<.*"fon5 wid255 fl">(.*)</ismU'

Lưu lại đoạn mã để tham khảo:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<?php
  $data = file_get_contents('http://dantri.com.vn/giao-duc-khuyen-hoc.htm') or die('Không đọc được dữ liệu');
  $pattern = '/class="mt3 clearfix eplcheck">.*src="(.*)".*class="fon6".*>(.*)<.*fon5 wid324 fl">.*(.*)</ismU';
  preg_match_all($pattern, $data, $matches);

  $result = array();
  foreach($matches[1] as $key => $value ) {
    $result[$key]['image'] = $matches[1][$key];
    $result[$key]['title'] = $matches[2][$key];
    $result[$key]['description'] = $matches[3][$key];
  }
  // lấy mẩu tin đầu tiên
  $pattern = '/class="mt3 clearfix".*src="(.*)".*"fon44".*>(.*)<.*"fon5 wid255 fl">(.*)</ismU';
  preg_match($pattern, $data, $matches);
  $top['image'] = $matches[1];
  $top['title'] = $matches[2];
  $top['description'] = $matches[3];
  // gắn $top vào đầu chuỗi $result
  array_unshift($result, $top);
 ?>
 <div class="container">
<?php
  foreach ($result as $key => $value) {
?>
   <div class="news">
     <img src="<?php echo $value['image']; ?>" alt="">
     <h3><a href="<?php echo $value['link']; ?>"><?php echo $value['title']; ?></a></h3>
     <p><?php echo $value['description']; ?></p>
   </div>
 <?php
 }
?>
 </div>
</body>

</html>
-----------
Cập nhật [16/9/2020]
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web