Làm sao crawl hàng triệu page Google với chi phí 0 đồng?
Created
Apr 26, 2021 09:47 AM
Tags
Tor
proxy
privoxy
docker
hảpoxy
Property
How to crawl large data Google using cheaps proxy
Chắc ai làm về IT cũng đã từng phải crawl data, công việc hết sức bình thường.
Nhưng đời ko như là mơ, đó là việc bị chặn, crawl nhiều ip bị blacklist.
Nếu có tiền thì có vô số dịch vụ proxy dành cho crawl, hoặc crawl cloud, nhưng ít tiền hoặc không muốn mất tiền như mình thì sao nhỉ.
Cách đơn giản nhất mình sẽ hướng dẫn các bạn là dùng TOR, chắc mọi nghĩ thằng này điên, TOR chậm thế sao mà crawl.
Mình sẽ chỉ cách làm cho nó nhanh lên rất nhiều lần.

Yêu Cầu

  • Máy có cài sẵn docker
  • Cài proxifier

Tiến hành

Bước 1:

Thực ra không cần thiết phải dùng docker, có thể dùng máy ảo,lxc... nhưng mình dùng docker cho nhanh, nó cũng quen thuộc với mình
Vì chỉ sử dụng làm proxy nên mình dùng luôn hàng có sẵn, không nhất thiết phải build làm gì
Các bạn pull image này về nhé dperson/torproxy
Image này đã cài sẵn TOR và privoxy, nếu bạn dùng socks thì ko cần quan tâm đến privoxy
Các bạn chạy lệnh sau để chạy
docker run -it -p 8118:8118 -p 9050:9050 -d dperson/torproxy
thực ra chỉ cần chạy
docker run -it -d dperson/torproxy nếu bạn không có nhu cầu truy cập từ xa.
Proxy sẽ có dạng IP:8118
Socks thì IP:9050
Chỉ đơn giản vậy thôi à, thế vẫn chưa đủ, cần thêm 1 số cấu hình
Chúng ta khai báo thêm vài biến Environment cho nó, VD:
  • TOR_ExitNodes={de},{nl},{be},{fr},{pl},{cz},{at},{ch}
  • TOR_EntryNodes={de},{nl},{be},{fr},{pl},{cz},{at},{ch}
  • TOR_MaxCircuitDirtiness=240
Giải thích: TOR_ExitNodes dùng để khai báo các nodes mà TOR exits, tức là ip khi truy cập web sẽ là ip của những country này. TOR_EntryNodes là các nodes TOR sẽ đi qua, TOR_MaxCircuitDirtiness thời gian thay đổi ip, mình đặt 240 tức là 240 giây sẽ thay đổi IP. Các bạn thay đổi theo nhu cầu.
Vì mình crawl trên VPS location ở Germany nên mình khai báo mấy nước lân cận, Nếu xài ở VN thì điền mấy nước hàng xóm VN cho nhanh
Khai báo như thế sẽ mất tính ẩn danh của TOR, nhưng cái mình quan tâm tới là tốc độ.

Bước 2:

Từng đó vẫn chưa đủ, chúng ta cần nhân bản lên nhiều nữa
Đối với docker thì quá dễ rồi, nhân bản bao nhiêu lần thì chạy bấy nhiêu lệnh docker bên trên.
Hoặc tạo 1 file composer là ok

Bước 3

Vậy làm sao mà dùng, chúng ta cần phải thiết lập load-balancing cho đám proxy đó, trên windows thì ta cài proxifier, và dùng proxy chain
Cái này bạn tự tìm hiểu nhé, rất dễ nó có 3 chế độ.
Nên xài chế độ load-balancing, nó sẽ cân bằng tải đều trên các proxy
Mượn tạm cái ảnh của nó, xin lỗi vì trong khi viết bài này máy crawl đang tắt
Thường mình tạo 10-20 doker để crawl tuỳ project.
Trên windows mình dùng scrapebox để crawl, mình đã test crawl các SE nổi tiếng GG, yahoo, Bing, Duckduckgo liên tục 7 ngày, thu được hàng triệu link, tỷ lệ lỗi dường như rất ít. Riêng GG kết quả không được như các SE khác nhưng chấp nhận được.
Trong quá trình crawl mình gặp rất ít site chặn Tor network, có gặp mỗi site lyrics.com là chặn Tor network

Bonus

Nếu ko xài windows thì làm sao, làm sao để dùng trong terminal hoặc trong ứng dụng đặc biệt
Chúng ta xài gói này
Nó cài sẵn haproxy, privoxy, polipo
Nó có thiết lập 2 cấu hình:
  • http-to-haproxy-to-socks
    • Privoxy đứng đằng trước
    • HAProxy đứng đằng sau chia tải
    • Tor đứng đằng sau
  • haproxy-to-http-to-socks
    • HAProxy đứng trước chia tải
    • Privoxy đứng đằng sau
    • Tor đứng sau cùng
Các bạn chịu khó đọc document ở đó, đại khái auto load balancing mình chỉ cần khai báo cần số lượng bao nhiêu TOR là xong, khá đơn giản.
Sử dụng chỉ cần khai báo IP:port
Trong quá trình mình sử dụng thì thấy cách dùng proxifier ít bị lỗi hơn, cách dùng thứ 2 thỉnh thoảng có lỗi