Tôi đã tìm việc trên ITViec bằng cách query trong database như thế nào?
White

Đức Duy viết ngày 02/05/2018

alt text

Lời dẫn

Do tôi có nhu cầu chuyển việc nhưng lại quá đau đầu với cách tìm kiếm việc làm thông thường, các filter trên website không đủ với yêu cầu của tôi.
Vì thế tôi mạn phép crawl toàn bộ dữ liệu của Itviec về để tự query trong db của mình.

Thông số

Time: 3 hours.
Line of code: 80 lines.
runtime: < 5 mins.

Các công nghệ sử dụng

  • Nodejs, Mongodb, Typescript
  • Thư viện async, mongoose, cherrio, axios

Lưu ý 1: Mình sẽ không đăng source code vì chưa được sự đồng ý từ ITViec .

Lưu ý 2: Mình tìm việc nhưng tập trung vào công ty và môi trường công ty nên sẽ mình sẽ lấy dữ liệu các công ty thay vì dữ liệu jobs.

Step By Step

Bước 1: Lấy toàn bộ đường dẫn đến các công ty

const listURL = ['', 'd-f', 'g-i', 'j-l', 'm-o', 'p-r', 's-v', 'w-z']
ITViec phân trang theo tên công ty nên mình có list trên
alt text
Sau đó mình parse html để lấy link đến công ty ở trên trang theo dòng code dưới đây
let listCompanyLink = $('.skill-tag__item .skill-tag__link').toArray().map(e => $(e).attr('href'))

Thế là mình đã có tất cả đường dẫn đến các công ty, tổng cộng 866 công ty.

Bước 2: Lấy thông tin trong từng công ty

Khi đã có list link đến các công ty mình sẽ chạy async 10 link 1 để lấy thông tin. Việc limit async với mục đích không bị nginx chặn, mình thích số 10 thôi, chậm hơn 1 chút cũng ksao cả :)))

alt text

Mình lại parse html để lấy thông tin mình cần

let [address, type, employees, country, workDay, OT] = $('.name-and-info span').toArray().map(e => $(e).text().trim())

let companyInfo = {
      name: $('h1').first().text().trim(),
      avatar: $('.logo-container img').attr('src'),
      banner: $('.cover-images-desktop img').attr('src'),
      address: address,
      type: type,
      employees: employees,
      country: country,
      workDay: workDay,
      OT: OT,
      overview: $('.panel.panel-default').eq(0).find('.paragraph').html().trim(),
      website: $('.ionicon a').attr('href'),
      facebook: $('.social-icon a').attr('href'),
      description: $('.panel.panel-default').eq('-3').find('.paragraph').html().trim(),
      link: link
}

Sau đó lưu vào database. Mình dùng mongodb trên docker nên mọi thứ khá easy.

Bước 3: Lấy thông tin jobs theo company

Phần này các bạn tự tìm hiểu nhé, tương tự ở bước 2 thôi :D

Kết

Thế là mình đã có dữ liệu mình cần, giờ query theo ý rồi nộp CV thôi.
Cảm ơn các bạn đã đọc bài :)

Ảnh database

alt text

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Đức Duy

2 bài viết.
12 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
13 4
(Ảnh) Trước khi code bạn cần làm những điều gì? SSH đến 1 vài server. NPM run 2,3 project. Bật IDE sau đó open vài project. Một ví dụ cụ t...
Đức Duy viết 8 tháng trước
13 4
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
12 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!