Crawl Website
Theo mình có 2 cách:
- Cách nhanh nhất: Sử dụng 1 thư viện nào đó để tự động hoá tool clone sẵn có. Trong đó
httrack rất nổi tiếng trong việc clone website vd:
gem install win32-autogui
- Cách chậm hơn chút: Gửi từng request để lấy hết dữ liệu về.
Ví dụ websiteA.com
- Gửi request tới websiteA/index để lấy nội dung html đầu tiên
- Lưu hết asset của nó về (js, css, img). Replace asset links trong html nếu cần thiết
- Lưu html đã chỉnh sửa vào file
- Parse hết thẻ <a> trong html đó và làm lại bước 1
- Xong hết tất cả thì ném kết quả qua Rail để làm API thôi
Ví dụ gửi request lấy nội dung:
require 'net/http'
source = Net::HTTP.get('viblo.asia', '/q/crawl-website-QqKLQ0ArZ7z')
Lấy hash của request
Không được rồi em. Server side không thể nhận được #hash.
curl localhost:8080/index#hashne
Request log chỉ nhận /index
[Thu Apr 12 10:50:44 2018] ::1:50792 [200]: /index
Phải xử lý ở client side thôi em
Xamarin hay React Native
Mình thì chưa sử dụng Xamarin nên chưa đánh giá được ưu nhược điểm của nó. Tuy nhiên mình có hỏi một vài đàn anh code cả native mobile và cross platform như react native hay xamarin thì các anh đều vote cho react native
I. Về ưu nhược điểm của react native
- Ưu điểm:
- Dễ học. Đặc biệt đối với người đã có nền tảng web từ trước
- Cộng đồng cực đông đảo nên mọi lỗi, solution search gần như là ra hết
- Thời gian hoàn thành sản phẩm ngắn (ưu điểm chung của cross platform mà)
- Học xong react native thì cũng được 50% để trờ thành frontend web dev rồi
- Nhược điểm:
- Để đạt được hiệu năng cao cần đòi hỏi phải "hack" khá nhiều. Những task nặng thì đòi hỏi developer phải biết cả native ios, android nữa. Chứ những task đó mà xử lý bằng JS thì chậm như rùa
- Khá tốn thời gian vào việc config, release. Đặc biệt là config xcode. Dự án đầu tiên mình đã làm thì khoảng thời gian này chiếm tới tầm 50% thời gian làm dự án
II. Về cơ hội việc làm
Tại thời điểm mình viết bài thì mình có tìm thử job qua một số trang như vietnamwork, itviec thì job chứa từ khoá react-native hơn nhiều so với xamarin. Về lương lậu thì tương đương nhau
=> Ý kiến của mình: Bạn có thể tự học trải nghiệm làm project nho nhỏ với cả 2 nền tảng trên xem sao. Cố gắng trải nghiệm hết mọi concept của một ứng dụng thông thường (call API, authentication, common UIs, access level to native API, ...). Thấy cái nào ok hơn thì bạn đào sâu. Một khi đã có quyết tâm nắm chắc kiến thức rồi thì chắc chắn bạn sẽ có việc làm thôi vì đây đều là hot trend mà
Làm thế nào để mã hóa mã nguồn PHP
Về vấn đề bảo mật source code như này theo mình biết thì có 2 cách giải quyết chính như sau:
- Cách 1: Encrypt/Obfuscation source code. Kết hợp 2 phương thức này giúp bạn bảo mật code khá OK tuy nhiên vẫn có khả năng bị "dịch ngược". Tuy nhiên chắc chắn rằng khách hàng sẽ không làm điều này vì thuê 500 anh em dev khác code app tương tự còn đỡ tốn kém hơn . Bạn có thể dùng công cụ IonCube hoặc Zend Guard.
- Cách 2: Tách phần code, logic quan trọng ra 1 service riêng chạy trên server của bạn. Bên app khách hàng cần thì request thôi. Như vậy khỏi lo khách hàng nghịch nữa nhưng có vẻ sẽ rất phức tạp đó
Preview file trên web
Bạn thử xem nhé
<iframe src="https://docs.google.com/viewer?embedded=true&url=DOCUMENT_URL"></iframe>
LÀM THẾ NÀO GIẢI MÃ TIẾNG TRUNG QUỐC (CHINESE CHARACTER) TRONG SERVER NODEJS?
Mình đã thử window prompt củ chuối và cũng bó tay Bạn dùng trình terminal cmder (http://cmder.net) để thay thế nhé
Lấy dữ liệu từ nhiều database khác host trên PHP.
- Nhìn qua code và phần view của bạn mình thấy bạn đang gặp khó khăn trong việc lấy (EXT, IP) từ DB A để gán vào truy vấn của DB B đúng không? :slight_smile:
- Có lẽ bạn không thạo frontend thì theo mình đây là cách dễ nhất đối với bạn bây giờ:
- Bạn bắt sự kiện khi change 1 trong 3 cái dropdown. Sau đó redirect tới URL với các query string tương ứng với giá trị 3 cái dropdown đó (đây chính là kết quả câu truy vấn 1).
- Tại trang PHP của bạn. Bạn bắt các kết quả câu truy vấn 1 đó qua
$_GET
và gán nó vào câu truy vấn tới DB B. Bạn thử xem nhé :slight_smile:
[NODEJS] LÀM SAO LẤY DỮ LIỆU TỪ WEBSITE CÓ SỬ DỤNG AJAX BẰNG NODEJS
Chào bạn! Với những trang web phức tạp như này thì mình nghĩ nên sử dụng headless browser để lấy dữ liệu. Mình chia thành 2 phần cho dễ theo dõi nhé 1. Giới thiệu chung
- Theo kiến thức hạn hẹp mình biết thì hiện nay có 2 cách lấy dữ liệu web tự động (trộm) chính đó là:
- Phương pháp sử dụng request (Request base method): Phù hợp với trang web tĩnh, ít sử dụng ajax, url đối tượng cần get có thể đoán được (?page=1, ?image=2, ...)
- Phương pháp sử dụng trình duyệt (Browser base method): Áp dụng với trang web động, sử dụng nhiều ajax, đôi tượng cần get rất khó đoán được (do generate từ minified JS ra)
- Trong phạm vi câu hỏi mình sẽ giới thiệu về phương pháp thứ 2. Sở dĩ được gọi là headless browser bởi vì thứ nhất nó là 1 browser, thứ 2 là nó có thể chạy mà không cần tới giao diện người dùng (UI). Bạn có thể điều khiển headless browser thông qua API mà nó cung cấp.
- Với NodeJS thì có một số tên tuổi đình đám sử dụng Chrominum như:
- PhantomJS https://github.com/ariya/phantomjs
- NightmareJS https://github.com/segmentio/nightmare
- Puppeteer của chính Chrome luôn https://github.com/GoogleChrome/puppeteer
- Còn sử dụng Firefox thì có
- SlimerJS https://github.com/laurentj/slimerjs
- Công dụng chính của headless browser: Để tự động hóa các tác vụ trên trình duyệt (test UI, lấy dữ liệu,...)
2. Bắt tay vào làm nào
- Mấy thư viện trên gần như tương tự nhau về mặt chức năng. Mình thì thích API của Puppeteer hơn vì nó sinh sau đẻ muộn và cú pháp nó gắn gọn hơn. Bạn setup theo hướng dẫn tại đây https://github.com/GoogleChrome/puppeteer
- Phương châm khi lấy dữ liệu bằng headless browser đó là: "thấy được lấy được" )
- Ok mình demo lấy 5 cái ảnh to sản phẩm ở link này cho bạn (https://world.tmall.com/item/543285442762.htm). Điểm khó ở đây đó chính là 5 ảnh này chỉ xuất hiện sau khi mình hover => JS sẽ xử lý sự kiện => chạy ajax để lấy ảnh về. Với cách lấy dữ liệu sử dụng cURL thì việc này gần như là bất khả thi vì phải decode 1 đống JS đã minify để xem logic lấy URL ảnh kiểu gì. Do đó chúng ta nên dùng headless browser.
- Loay hoay mãi cũng ra. Mình comment trong code luôn cho bạn dễ hình dung nhé.
- Chạy
$ node index.js
- Và đây là kết quả trên console
'https://img.alicdn.com/imgextra/i3/1695308781/TB2wkICt9hlpuFjSspkXXa1ApXa_!!1695308781.jpg_430x430q90.jpg',
'https://img.alicdn.com/imgextra/i2/1695308781/TB2uwGFb88kpuFjSspeXXc7IpXa_!!1695308781.jpg_430x430q90.jpg',
'https://img.alicdn.com/imgextra/i4/1695308781/TB2kzeCb80kpuFjy1XaXXaFkVXa_!!1695308781.jpg_430x430q90.jpg',
'https://img.alicdn.com/imgextra/i3/1695308781/TB2AouUeYBmpuFjSZFAXXaQ0pXa_!!1695308781.jpg_430x430q90.jpg' ]
Chúc bạn thành công!
Tổ chức
Chưa có tổ chức nào.