Skip to content

Blog Công Nghệ

MENUMENU
  • Trang chủ
  • Giới Thiệu
  • Lập Trình
    • Lập Trình Website
      • Laravel
        • Phân Tích Dự Án
      • PHP
      • SQL
      • HTML
      • CSS
      • Javascipt
      • My Project
      • Wordpress
    • Luyện Skill
    • Lập trình winform
    • CSDL
    • Lập Trình Android
    • Trí tuệ nhân tạo
    • Khai Khoáng Dữ Liệu
    • Arduino
    • Khác
    • Đồ án
  • Phần Mềm
    • Powerpoint
    • Tool
  • Cuộc sống và Giải trí
    • Hợp âm
    • web5ngay - youtube
    • Công Giáo
    • Kỹ Năng Sống
    • Street Workout
  • Danh sách bài viết
  • Guide line
    • Guild line phỏng vấn
    • Guide lines Laravel
    • Guide line Module Frontend
  • Tóm tắt sách
  • Fanpage

Blog Công Nghệ

Nơi chia sẻ kiến thức

Crawl dữ liệu từ trang web – không chỉ đơn giản mà còn dễ dàng

1 Tháng Năm, 2020 by admin
Lượt xem: 358

Bạn muốn lấy các dữ liệu từ một website để sử dụng cho mục đích riêng của mình như: làm webservice hay lưu trữ về dạng json hay database thì hãy cùng mình tìm hiểu nhé!

Contents

  • 1. Thư viện Goutte
  • 2. Sử dụng
    • 2.1 Lấy html của trang cần crawl
    • 2.2 Lọc các thẻ
    • 2.3 Lấy text của một element
    • 2.4 Lấy giá trị thuộc tính của một element
  • 3. Ứng dụng
  • Kết Luận

1. Thư viện Goutte

  • document của thư viện: https://goutte.readthedocs.io/en/latest/
  • Hướng dẫn cách cài: dùng composer của php chạy lệnh bên dưới
composer require fabpot/goutte

Nếu chưa cài composer thì vào Bước đầu sử dụng Laravel ở mục số 2 mình có hướng dẫn + link download nhé!

2. Sử dụng

Sau khi chạy lệnh trên bạn sẽ được như hình sau:

Bạn tạo file mà bạn sẽ viết code trong đó. Như hình trên mình tạo file vidu.php

Trong file ví dụ bạn viết như sau trước khi sử dụng thư viện.

<?php 
require('vendor/autoload.php');

use Goutte\Client;

$client = new Client();

2.1 Lấy html của trang cần crawl

$crawler = $client->request('GET', 'https://freetuts.net/hoc-php');
/* Thay đường dẫn https://freetuts.net/hoc-php lại cho phù hợp nhé */

2.2 Lọc các thẻ

//Lọc theo thẻ
$crawler->filter('h2')->each(function ($node) {
    print $node->text();
});

//Lọc theo thẻ có classname
$crawler->filter('span.author')->each(function ($node) {
    print $node->text();
});

//Lọc theo thẻ có id
$crawler->filter('span#author')->each(function ($node) {
    print $node->text();
});

//Lọc theo thuộc tính
$crawler->filter('[href="http://abc.com"]')->each(function ($node) {
    print $node->text();
});

2.3 Lấy text của một element

//$node->text() để lấy
$crawler->filter('span.author')->each(function ($node) {
    print $node->text();
});

/*
	Hàm each là duyệt tất cả các phẩn tử trong mảng
    Tương tự như foreach
    Nhưng này là hàm được định nghĩa trong thư viện
*/

2.4 Lấy giá trị thuộc tính của một element

//$node->attr('ThuocTinhCanLay')
$crawler->filter('span.author')->each(function ($node) {
    print $node->attr('href');
});

Còn nhiều phương thức khác được định nghĩa trong vendor/symfony/dom-crawler/Crawler.php bạn xem thêm nhé!

3. Ứng dụng

Ví dụ: lấy tất cả hình của trang https://freetuts.net/hoc-php
// vào thư mục hình

<?php 
require('vendor/autoload.php');

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', 'https://freetuts.net/hoc-php');

$crawler->filter('img')->each(function ($node) {
    $s = $node->attr('src');
	$img = 'hinh/'. basename($s);
	file_put_contents($img, file_get_contents($s));
});

/*
  $img = 'hinh/'. basename($s);
  file_put_contents($img, file_get_contents($s));

	* Code này để lưu hình ảnh vào thư mục hinh
    * Với tên được cắt theo tên file của đường dẫn $s
*/

Ví dụ khác muốn lấy chữ Đăng bởi: Administrator của trang https://freetuts.net/hoc-php

<?php 
require('vendor/autoload.php');

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', 'https://freetuts.net/hoc-php');

$crawler->filter('span.author')->each(function ($node) {
    print $node->text();
});

Video clip demo 2 ví dụ trên

Kết Luận

Như vậy, crawl data từ trang web khác cũng dễ phải không? Cảm ơn các bạn đã đọc bài viết, nếu có thắc mắc gì hãy để lại comment bên dưới nhé!

Related posts:

  1. Tích hợp Page Facebook cho wordpress đơn giản, dễ dàng – không cần plugin
  2. Đăng ký google keyword planner miễn phí không cần thẻ visa đơn giản hiệu quả 2020
  3. Đăng ký web với google còn đơn giản hơn Bing
  4. Xử lý đăng nhập bằng facebook đơn giản

Post navigation

Previous Post:

Các đề tài đồ án tổng hợp

Next Post:

Migrations trong Laravel

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Ẩn sidebar

Tìm kiếm

Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages

Blog Công Nghệ

Bài viết mới

  • Master typescript
  • Sendmail trong Laravel sử dụng dịch vụ SES, SQS của Amazon
  • Install SSL in Nginx Ubuntu
  • Docker study
  • Bảo vệ: Hướng dẫn code bot Telegram easy game

Lượng truy cập

0076340
Visit Today : 103
Visit Yesterday : 135
This Month : 2611
Who's Online : 1
© 2025 Blog Công Nghệ | WordPress Theme by Superbthemes