Ứng dụng Python Siêu dễ: Lập trình Bot kéo Dữ liệu Người dùng Linkedin (Python & BeautifulSoup)

Поделиться
HTML-код
  • Опубликовано: 25 окт 2024

Комментарии • 262

  • @BoringPPL
    @BoringPPL  3 года назад +10

    TỔNG HỢP CÁC LỖI THƯỜNG GẶP VÀ CÁCH XỬ LÝ
    LỖI 1: Không khởi tạo được trình duyệt Chrome "Error message: “'chromedriver' executable needs to be available in the path”
    Cách xử lý: stackoverflow.com/questions/29858752/error-message-chromedriver-executable-needs-to-be-available-in-the-path
    LỖI 2: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="ember19"]/input"}
    (Session info: chrome=89.0.4389.114)
    Cách xử lý: Trong video mình có đề cập một khái niệm là "Dynamic Element" (ở phần locate nút Next) là dạng thành phần mà cứ mỗi lần reload trang web là nó sẽ lại thay đổi cái ID của nó (vd lần 1 truy cập ID là "ember26", reload trang thì ID lại thành "ember19"). Khi mình làm video này thì nút Search không phải Dynamic Element nên mình tìm bằng xpath với ID được, nếu bạn gặp lỗi này thì có thể Linkedin đã đổi nên có thể sửa bằng cách thay vì dùng xpath với ID thì hãy dùng xpath với class nhé, thay cú pháp như bên dưới:
    search_field = driver.find_element_by_xpath('//*[@class="search-global-typeahead__input always-show-placeholder"]')
    LỖI 3: Mình làm theo video hết phần task 1 thì thông báo ở LinkedIn là: "Let's do a quick verification. The login attempt seems suspicious. To finish signing in please enter the verification code we sent to your email address."
    Cách xử lý: Để tránh việc đăng nhập quá nhiều lần trong khung thời gian ngắn, trong quá trình viết code và test code, bạn nên sử dụng các code editor có từng cell một vd như Jupyter Notebook, iPython Notebook, Google Colab, etc. để sau khi hoàn thành phần Đăng nhập, bạn có thể thao tác tiếp tục ở các code cell bên dưới thay vì việc chạy cả một file code thì bạn sẽ cứ phải đăng nhập lại mỗi lần chạy. Cụ thể trong video hướng dẫn mình sử dụng Jupyter Notebook trên Visual Studio Code, bạn sẽ thấy mình đăng nhập 1 lần thôi rồi sau đó chuyển sang các task khác bằng cách sử dụng các code cell bên dưới. Có một cách khác nữa để không cần đăng nhập vẫn kéo được dữ liệu là dùng thư viện request, có thể mình sẽ nói kĩ hơn ở video sau.
    LỖI 4: Lỗi báo là không xác định biến "URLs_all_page"
    Lỗi này có liên quan đến khái niệm "Global/Local Scope" trong function. Khi bạn tạo một biến bên trong function (Local Scope), biến này được gọi là Local Variable (biến URLs_all_page của mình đang là Local Variable). Local Variable chỉ có hiệu lực bên trong function của nó, nếu dùng ngoài Local Scope của nó (tức là dùng ở Global Scope, hoặc dùng ở Local Scope khác), biến sẽ không có hiệu lực.
    Để giải quyết vấn đề này thì mình phải tạo một Global Variable tên là URLs_all_page và gán giá trị function GetURLsonPages() cho nó ấy. Trong video mình có sơ xuất quay thiếu màn hình lúc mình tạo biến URLs_all_page = GetURLsonPages(). Giờ bạn chỉ cần thêm 1 dòng này trước khi bạn dùng biến URLs_all_page là chạy mượt

    • @quandaoxuan9672
      @quandaoxuan9672 2 года назад

      Hi team, Cho anh hỏi team copy Xpath với class như nào nhé, anh copy và paste thì chỉ nhận được Xpath id. Cảm ơn team!

    • @BoringPPL
      @BoringPPL  2 года назад +1

      @@quandaoxuan9672 dạ chào anh! theo mặc định thường khi copy xpath thì sẽ chỉ lấy dc xpath từ ID, nên nếu muốn có xpath từ class thì em sẽ tự viết luôn ạ.
      anh xem tham khảo video này ở phút 18:45 nhé trong đó em có chia sẻ về cách tạo xpath từ các attribute bất kỳ (eg. id, class, etc.) ruclips.net/video/99IqWzIZ8vM/видео.html

    • @quandaoxuan9672
      @quandaoxuan9672 2 года назад

      @@BoringPPL cảm ơn em nhiều!

    • @netinter9207
      @netinter9207 2 года назад

      copy cái xpath class của chị rồi mà nó vẫn lỗi như trên thì làm sao chị

    • @BoringPPL
      @BoringPPL  2 года назад

      @@netinter9207 xpath class của element nào á em?

  • @HuyPham-id7us
    @HuyPham-id7us Год назад +1

    nghe chị phát âm đã quá, mong chị ra nhiều video hơn nữa!!!

  • @joeytrinh7786
    @joeytrinh7786 3 года назад +1

    Tuyệt vời. B làm rất rõ ràng vs dễ hiểu vs cả những người hoàn toàn mới như mình. Hãy tiếp tục nhé

  • @ducthuongtran7582
    @ducthuongtran7582 Год назад

    Rất hay và hữu dụng. Anh sẽ ủng hộ Team để ra tiếp những video tương tự như thế này.

  • @anonemoretime3499
    @anonemoretime3499 3 года назад

    Chị giỏi quá. Mong nhiều người biết đến kênh của Chị!

    • @BoringPPL
      @BoringPPL  3 года назад +1

      cảm ơnnn em nhiềuuu nhe

  • @minhquang9007
    @minhquang9007 3 года назад +3

    Nội dung cô đọng, trình bày rất lôi cuốn ^^ Keep moving nhe1ee sis

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơn bạn đã ủng hộ kênhhhh

  • @futurebinance2522
    @futurebinance2522 3 года назад +1

    Rất hay và thực tế. Mong bạn ra thêm nhiều video như thế này. Làm các tool bên facebook thì chắc nhiều người quan tâm

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơn bạn đã ủng hộ kênh, mình sẽ làm thêm video ạ

  • @palomadoan
    @palomadoan 3 года назад

    Rất hay và rất dễ hiểu, cảm ơn bạn nhiều. Chúc bạn luôn khỏe và làm thêm nhiều videos hay như này nữa nhé

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơnnn bạn nhé

  • @DevNhaX7901
    @DevNhaX7901 3 года назад +5

    Nội dung rất hay chị ạ!!! Chắc chắn tương lai kênh sẽ rất phát triển.

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơn bạn nhiều nhé

  • @nguyenhuy327
    @nguyenhuy327 3 года назад

    Tuyệt vời. Mong bạn ra nhiều video bổ ích hơn nữa.

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơnn bạn ạ

  • @longviet9996
    @longviet9996 3 года назад +1

    Rất chi tiết và dễ hiểu. Cảm ơn bạn nhiều

    • @BoringPPL
      @BoringPPL  3 года назад

      không có chiii bạn, cảm ơn bạn đã ủng hộ kênh

  • @VidishArvind
    @VidishArvind 2 года назад +3

    I couldn't understand the language but loved your tutorial, thanks....i think i saw the english version somewhere.🤔

  • @tuananhdinh3871
    @tuananhdinh3871 3 года назад

    đỉnh quá, giờ mới biết tới kênh của bạn. Cách truyền đạt tuyệt vời :)

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơnn bạn nha

  • @hoanguyenthien9114
    @hoanguyenthien9114 2 года назад

    phát âm tiếng anh của bạn rất ấn tượng

  • @nguyendactung
    @nguyendactung 2 года назад

    Kênh này hay thế nhỉ :3
    Code gọn, sạch mà dễ hiểu

    • @BoringPPL
      @BoringPPL  2 года назад

      dạa mình cảm ơnn ạ

  • @toilakysu9167
    @toilakysu9167 3 года назад +1

    Nghe giọng thấy hay lên xem không phải tua!

  • @manhpham5772
    @manhpham5772 3 года назад +2

    What a great work you did! keep it up.

  • @speedbeeqs
    @speedbeeqs 3 года назад

    Giọng bạn trình bày nghe cute ghê

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơnn bạn nheee

  • @coding_vlsi_vietnam
    @coding_vlsi_vietnam 3 года назад

    kênh rất hay nha bạn . Rất thích học CNTT mà quá bận rộn vì công việc . Kênh hay lắm bn

    • @BoringPPL
      @BoringPPL  3 года назад

      Cảm ơnnn bạn nhaa

  • @ckaiwei
    @ckaiwei 3 года назад +1

    relevant content for production work.

  • @Thichlathich
    @Thichlathich 3 года назад

    Rất dễ hiểu, thankyou!

  • @minhtien9596
    @minhtien9596 7 месяцев назад

    VIDEO của bạn hay quá, mình mong được học hỏi thêm từ bạn

    • @BoringPPL
      @BoringPPL  7 месяцев назад

      dạaa cảm ơn bạn nhee~

  • @phamngoctoan533
    @phamngoctoan533 7 месяцев назад

    cám ơn bạn rất nhiều, chúc bạn có nhiều video hữu ích

    • @BoringPPL
      @BoringPPL  7 месяцев назад

      cảmm ơnn bạn đã ủng hộ ạaa

  • @sadlyken
    @sadlyken 3 года назад

    ok bạn xứng đáng 1m likes !

    • @BoringPPL
      @BoringPPL  3 года назад

      thankss bạn nhìuu nhe

    • @sadlyken
      @sadlyken 3 года назад

      @@BoringPPL cho mình hỏi với cách này mình có thể lấy dữ liệu trên các trang chứng khoán có số liệu báo cáo tài chính ko ?

    • @BoringPPL
      @BoringPPL  3 года назад

      ​@@sadlyken về cơ bản là được hết đó bạn, trừ khi trang web đó chặn crawler thôi, nếu không thì oke hết :D

  • @daotrongduc99
    @daotrongduc99 3 года назад

    Giọng của chị hay 👍

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơn emmm đã ủng hộ kênh

  • @nguyenphuocnham7843
    @nguyenphuocnham7843 2 года назад

    xịn quá c ơi kkk

  • @letu3716
    @letu3716 3 года назад

    Được quá sis ơi, keep your good work !

  • @gmeow-f4p
    @gmeow-f4p 11 месяцев назад

    trời uiiiii, đỉnh quá c oiwiiiii!!!! e cảm ơn c nhìuuuuuu

  • @makemoney6614
    @makemoney6614 3 года назад

    Hay qua ad oi

    • @BoringPPL
      @BoringPPL  3 года назад

      mình cảm ơnn nhé

  • @huytruongcong9250
    @huytruongcong9250 3 года назад

    Chị giỏi ghê, em chưa làm được gì cả, hic

    • @BoringPPL
      @BoringPPL  3 года назад

      Em cứ bắt đầu và kiên trì đi rồi sẽ làm được nè, nhanh thì vài tháng còn chậm thì 1-2 năm. nhưng cái quan trọng là bắt đầu và tiếp tục làm cho đến khi được :)))

  • @dm_haui
    @dm_haui 11 месяцев назад

    thích cách mọi thứ chi tiết và dễ dàng

  • @thieuquang7978
    @thieuquang7978 3 года назад +2

    Video khá chi tiết, tuy nhiên mình góp y nên nói tự nhiên hơn, mình cảm giác cách bạn truyền tải giọng chưa tự nhiên và hơi giống giảng bài

    • @BoringPPL
      @BoringPPL  3 года назад

      Cảm ơn góp ý của bạn nhe

  • @utherpally5304
    @utherpally5304 3 года назад

    Tuyệt vời!

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơn bạn đã ủng hộ kênh

  • @kysuketcau.T
    @kysuketcau.T 3 года назад

    Mình đã Sub và Like. Thanks.

  • @trungnghia4285
    @trungnghia4285 2 года назад +1

    bạn có thể lập trình bót kéo dữ liệu người dùng từ faceboock được không bạn . Hóng quài mà chưa thấy clip

  • @nguyenthinh3789
    @nguyenthinh3789 Год назад

    thanks very much

  • @hoangnhatquang4743
    @hoangnhatquang4743 2 года назад

    Clip bạn hay. Nhưng chất lượng hình ảnh hơi kém. Khó nhìn qué

  • @EdwinMartinez001
    @EdwinMartinez001 3 года назад

    hay lắm chị

  • @linhle4215
    @linhle4215 Год назад

    cho mình hỏi sao trình duyệt chrome của mình tự động tắt sau khi thực hiện xong lệnh get() ta?

  • @ducthuongtran7582
    @ducthuongtran7582 Год назад

    Anh muốn đăng ký học python với BoringPpl thì liên hệ như thế nào em ha?

  • @sangnguyenquang9490
    @sangnguyenquang9490 3 года назад

    hóng bài tiếp theo

    • @BoringPPL
      @BoringPPL  3 года назад

      có bài tiếp theo rùi đó nha :))) cảm ơn bạn đã ủng hộ kênh

  • @nguyennu3422
    @nguyennu3422 Год назад

    Cho mình hỏi là vs code của mình lại chỉ có hàm find_element, mình đang không biết làm thế nào để có find_element_by_id

  • @huonggiang537
    @huonggiang537 2 года назад

    Mình chưa thấy kênh nào về lập trình lại có cách trình bày dễ hiểu như vậy. Cảm ơn bạn :) mong bạn ra nhiều video hơn nữa. Cho mình hỏi có cách nào để liên kết với 1 web đã đăng nhập sẵn không? vì cái của mình có vấn đề là phần đăng nhập có mã captcha nữa?

    • @BoringPPL
      @BoringPPL  2 года назад

      cảm ơn bạn ạ

    • @huonggiang537
      @huonggiang537 2 года назад

      @@BoringPPL cảm ơn bạn. Trong mấy ngày qua mình mò ra cách dùng token để đăng nhập và gửi request. Mong bạn ra nhiều video hơn. Mình rất thích kênh nên đã like gần hết các video của kênh rồi :D

    • @BoringPPL
      @BoringPPL  2 года назад

      @@huonggiang537 uii cảmm ơnn bạnn nhiều lắm!

  • @anhquanle2261
    @anhquanle2261 Год назад

    Sao mình chạy trên vsc trên base anaconda (selenium cài trong anaconda) cứ đến bước login là giao diện webdriver của safari bay mất luôn, chạy bên jupyterlab thì ngon lành 😢

  • @phamkhacvinh7942
    @phamkhacvinh7942 3 года назад +2

    Làm thử series điuề khiển ứng dụng PC bằng python đi chị

    • @dungbuitoan6879
      @dungbuitoan6879 3 года назад

      tại sao tớ chạy c.trình xong đc 1 mấy giây, web tự động mất vậy ạ?

    • @tronghunghcn3906
      @tronghunghcn3906 Год назад

      @@dungbuitoan6879 cái này mình không biết bên MAC ntn nhưng bên WIN cũng bị giống bạn, khác phục = cách import thứ viện os vào với câu lệnh:
      import os
      (...
      ....)
      os.system("pause")

  • @ThuNguyen-pe8pv
    @ThuNguyen-pe8pv 3 года назад +1

    Cám ơn bạn nội dung rất hay và dễ hiểu, thậm chí đối với người chỉ biết chút cơ bản như mình! Bạn có thể làm thêm video về điều khiển một chương trình trên PC không? Mình thấy có rất nhiều chương trình trên PC mà sẽ phải lặp đi lặp lại rất nhiều thao tác giống nhau cho nhiều files! Cám ơn bạn rất nhiều!

    • @BoringPPL
      @BoringPPL  3 года назад +1

      cảm ơnn bạn đã ủng hộ nhe

    • @ThuNguyen-pe8pv
      @ThuNguyen-pe8pv 3 года назад

      @@BoringPPL Cám ơn bạn nhiều! Hôm nay mình thử làm theo các bước hướng dẫn của bạn và tới đoạn này mình không hiểu sao mình bị lỗi? Bạn có thể nhìn giúp mình không? Lỗi báo là không xác định biến "URLs_all_page" nhưng mình có gọi ở trên rồi, và cũng làm theo các bước như bạn! Mình không biết lỗi này xử lý thế nào? Đây là đoạn code mình chạy theo clip hướng dẫn của bạn! Cám ơn bạn nhiều!
      def GetURLsonPages():
      input_page = int(input())
      URLs_all_page = []
      for page in range(input_page):
      URLs_one_page = GetURL()
      sleep(2)
      driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
      sleep(2)
      next_click = driver.find_element_by_class_name("artdeco-pagination__button--next")
      next_click.click()
      URLs_all_page = URLs_all_page + URLs_one_page
      sleep(2)
      return URLs_all_page
      print(GetURLsonPages())
      #print(URLs_all_page)
      driver.get(URLs_all_page[0])
      NameError Traceback (most recent call last)
      in
      ----> 1 driver.get(URLs_all_page[0])
      NameError: name 'URLs_all_page' is not defined

    • @BoringPPL
      @BoringPPL  3 года назад +1

      @@ThuNguyen-pe8pv À lỗi này có liên quan đến khái niệm "Global/Local Scope" trong function. Khi bạn tạo một biến bên trong function (Local Scope), biến này được gọi là Local Variable (biến URLs_all_page của mình đang là Local Variable). Local Variable chỉ có hiệu lực bên trong function của nó, nếu dùng ngoài Local Scope của nó (tức là dùng ở Global Scope, hoặc dùng ở Local Scope khác), biến sẽ không có hiệu lực.
      Để giải quyết vấn đề này thì mình phải tạo một Global Variable tên là URLs_all_page và gán giá trị function GetURLsonPages() cho nó ấy. Bạn nói mình mới nhận ra trong video mình có sơ xuất quay thiếu màn hình lúc mình tạo biến URLs_all_page = GetURLsonPages(). Giờ bạn chỉ cần thêm 1 dòng này trong chương trình trước khi bạn dùng biến URLs_all_page là chạy mượt

    • @ThuNguyen-pe8pv
      @ThuNguyen-pe8pv 3 года назад

      @@BoringPPL Mình cám ơn bạn nhiều lắm! Bạn trả lời từng comment của mọi người, rất cám ơn bạn vì sự nhiệt tình và chia sẻ kiến thức này! :)
      Mình đã chạy lại toàn bộ code, và có thêm dòng code như bạn bảo, nhưng mình chạy vẫn không ra và báo lỗi, như này không biết là lỗi gì bạn nhỉ ? Bạn có thể xem giúp mình không?
      Mình cám ơn bạn nhiều!
      Mình chạy code như này:
      URLs_all_page = GetURLsonPages()
      driver.get(URLs_all_page[0])
      Và kết quả báo là:
      WebDriverException: Message: unknown error: net::ERR_NAME_NOT_RESOLVED
      (Session info: chrome=91.0.4472.124)

    • @BoringPPL
      @BoringPPL  3 года назад +1

      @@ThuNguyen-pe8pv Bạn kiểm tra lại thử URL truyền vào đúng không nhé. Bạn in giá trị này ra và make sure nó là URL chính xác nha "URLs_all_page[0]"
      Lý do gặp lỗi:
      "What does the error message “ERR_NAME_NOT_RESOLVED” mean?
      When you receive the “ERR_NAME_NOT_RESOLVED” error message, Chrome is saying that it could not find the IP address which matches the website domain name you entered."
      www.ionos.com/digitalguide/hosting/technical-matters/err-name-not-resolved-error/

  • @PMinh_Mtcd
    @PMinh_Mtcd 5 месяцев назад

    Và mong Ad nói chậm, thao tác chậm lại hơn 1 chút, thay vì phải chỉnh speed trên youtube, nghe nó hơi đừ ah.

    • @BoringPPL
      @BoringPPL  4 месяца назад

      dạa cảm ơn feedback của bạn ngen~ mình xin ghi nhận ạa

  • @HungtunREVO
    @HungtunREVO 3 года назад

    cảm ơn chị yêu

    • @BoringPPL
      @BoringPPL  3 года назад

      không có chiii em iuuu

  • @PMinh_Mtcd
    @PMinh_Mtcd 5 месяцев назад

    Chào Ad. Ad có thể cho mình xin link tải jupyter notebook giống của bạn, phiên bản dành cho Windown được ko ah? Bản JN mình cài có vẻ hơi khác với bạn. Mong bạn chia sẻ. Cảm ơn bạn.

  • @tranminhquoc6828
    @tranminhquoc6828 Месяц назад +1

    thay vì áp dụng cho linkedin thì e làm tương tự vs facebook, chiều chạy ngon ơ đi thể thao ăn tối xong cái chạy lại thì ElementClickInterceptedException, cíu em

  • @trietle3033
    @trietle3033 2 года назад

    selenium lỗi nhiều quá, mình ko chạy được ngay từ task 1
    Nó báo lỗi như này: DeprecationWarning: executable_path has been deprecated, please pass in a Service object

  • @caolun6523
    @caolun6523 3 года назад

    Video hữu ích. Mà giọng đọc tiếng anh nặng quá @@ nghe hơi khó chịu

    • @BoringPPL
      @BoringPPL  3 года назад

      cảm ơnn chia sẻ và góp ý của bạn nhe

  • @oroscopoitaly
    @oroscopoitaly 2 года назад

    find_field = driver.find_element_by_xpath('//*[@id="mount_0_0_Ho"]/div/div[1]/div/div[2]/div[2]/div/div/div/div/div/label/input')
    search_query = input('What do u wanna search?')
    find_field.send_keys(search_query)
    find_field.send_keys(Keys.RETURN)
    Chị ơi sau khi em chạy dòng tự động tìm tên xong nó lại ko hiện ra ""What do u wanna search?'' ở phần Terminal như của chị nhỉ?

    • @BoringPPL
      @BoringPPL  2 года назад

      nó có báo lỗi gì ko em nhỉ? em nhớ save code trước khi chạy nhé

  • @hoaibui7395
    @hoaibui7395 3 года назад

    Cám ơn bạn vì video hữu ích. Nhưng mà hình như tiếng hơi nhỏ.

    • @BoringPPL
      @BoringPPL  3 года назад +1

      cảm ơnnn bạn đã ủng hộ ạaa

    • @hoaibui7395
      @hoaibui7395 3 года назад

      @@BoringPPL 💪💪💪💪

  • @namnguyenngoc1948
    @namnguyenngoc1948 Год назад

    mình scraping 100 triệu record để làm bài nghiên cứu khoa học sử dụng big data dc k ạ

  • @hikiauto
    @hikiauto 3 года назад

    Cô giáo dạy hay quá. Cho mình hỏi thêm. Mấy trang web chặn IP hay doss gì đó. Mình requests khoảng 20-30 link thì chặn IP. Có cách nào vượt qua chặn IP ko bạn. Ngồi đổi vpn lâu quá. Thanks

  • @theanhtran5347
    @theanhtran5347 3 года назад

    Ad đang dùng phần mềm gì đó? Hihi

    • @BoringPPL
      @BoringPPL  3 года назад

      helluu bạn :D ad dùng Visual Studio Code cài thêm 2 extension là Python và Jupyter để tạo môi trường Jupyter Notebook trên VSC í bạn

  • @viennaarlene2320
    @viennaarlene2320 3 года назад

    như vậy mình chỉ có thể scrape data khi máy cài trình duyệt Chrome và sử dụng Jupyter ak? Vì máy mình chỉ dùng Microsoft Edge và Colabs

    • @BoringPPL
      @BoringPPL  3 года назад +1

      Hello bạn, theo mình biết thì Selenium hỗ trợ các loại browser sau: Chrome, Firefox, Internet Explorer, Opera, Safari. Nếu dùng Microsoft Edge thì có thể bạn phải tìm hiểu thư viện khác rồi. Còn Colabs và Jupyter thì tính năng như nhau nên bạn chạy trên Colabs hay Jupyter hay Source code Python đều được.

  • @hthchannel1998
    @hthchannel1998 Год назад

    sao mình làm nó báo là k có thuộc tính find. element.by_ID nhỉ

    • @annguyen3168
      @annguyen3168 7 месяцев назад

      Selenium xóa method đó từ version 4.3.0. Giờ bạn dùng method này nhé driver.find_element("name", "chuỗi") . Với name là loại cần lấy id, name, class, xpath. Ví dụ :
      search_box = driver.find_element("name", "Richest people")

  • @hoangphuluu5863
    @hoangphuluu5863 3 года назад +1

    Bạn có thể chia sẻ source code/ github được không? Thanks

    • @BoringPPL
      @BoringPPL  3 года назад

      Đây bạn nhé, mình vừa đính link trên description: github.com/boringPpl/Linkedin-profiles-scraping/

    • @hoangphuluu5863
      @hoangphuluu5863 3 года назад

      @@BoringPPL thanks b!

  • @Jack328Vlogs
    @Jack328Vlogs 2 года назад

    Bạn ơi, cho mình hỏi làm cách nào để mình lấy data của 1 website có nút "next page" nhưng khi click vào thì url không đổi vậy bạn? vì mỗi lúc click vào "next page" thì source page lại đổi nhưng mình chưa biết cách lấy data đó về như thế nào cả, mong bạn giúp đỡ... cảm ơn bạn!

    • @BoringPPL
      @BoringPPL  2 года назад

      helluu bạn, bạn cho mình xin ví dụ trang web nhé

  • @quoclechi5604
    @quoclechi5604 Год назад

    mình chạy hết đoạn trên rồi mà xuống chọn element thì không được, nó hiện lỗi này:
    'WebDriver' object has no attribute 'find_element_by_name'
    bạn cho mình xin cách khắc phục với ạ

    • @tructran6354
      @tructran6354 Год назад

      Mình cũng hiện lỗi như vậy, chưa biết sửa thế nào.

    • @truonghoangminh8884
      @truonghoangminh8884 Год назад

      @@tructran6354 Do thư viện đã update câu lệnh mới rồi á bạn, bạn fix thành find_element('name','tên đối tượng') là được nhé

  • @nhatnguyenle5378
    @nhatnguyenle5378 3 года назад

    chrome being controlled by automated test software? để giải quyết vấn đề này như thế nào?

    • @BoringPPL
      @BoringPPL  3 года назад

      hello bạn, bạn tham khảo hướng dẫn xử lý ở đây nhé stackoverflow.com/questions/43143014/chrome-is-being-controlled-by-automated-test-software

  • @baothai7866
    @baothai7866 10 месяцев назад

    vid hay quá ạ

    • @BoringPPL
      @BoringPPL  10 месяцев назад

      cảmmm ơn bạn ạaa

  • @bibochip1
    @bibochip1 3 года назад

    có thư viện nào tìm đến field => điền thông tin và submit form không ạ?

    • @BoringPPL
      @BoringPPL  3 года назад +1

      thư viện cụ thể làm chuyện đó thì mình không biết nhưng dùng selenium cũng oke đó bạn, logic tương tự như Task 1 lúc bạn điền thông tin đăng nhập

    • @bibochip1
      @bibochip1 3 года назад

      @@BoringPPL cảm ơn bạn, mình coi hết video mới thấy dùng selenium là gần như cover hết các cases mình cần rồi. Hy vọng bạn sẽ mở rộng nội dung về deep learning nữa. Bị ghiền kênh bạn rồi.

    • @BoringPPL
      @BoringPPL  3 года назад

      @@bibochip1 cảm ơn bạnn nhee

  • @minhucreview8647
    @minhucreview8647 3 года назад +1

    Em chào chị,e đang ở task 3 khi gõ software engineer people thì bị class thành visually-hidden,e có mở rất nhiều tab khác và đều bị tình trạng vissualy-hidden,vậy có cách nào search để ra data mà k bị hidden k ạ.
    Em xin cảm ơn vì chị đã đọc!

    • @BoringPPL
      @BoringPPL  3 года назад +2

      hello em, chị đoán là do cửa sổ browser của em bé quá máy tính không định vị được khung search, em thử thêm code bên dưới đây để mở to cửa sổ xem sửa được lỗi không nhé
      from selenium.webdriver.chrome.options import Options
      chrome_options = Options()
      chrome_options.add_argument("--window-size=1920,1080")
      driver = webdriver.Chrome(chrome_options=chrome_options)

    • @minhucreview8647
      @minhucreview8647 3 года назад

      @@BoringPPL để e thử ạ❤️

  • @kiethuynhanh2549
    @kiethuynhanh2549 2 года назад

    Dạ chị, em tính áp dụng bài này qua crawl điểm thi thật thì cũng được phải hong chị ?

    • @BoringPPL
      @BoringPPL  2 года назад +1

      miễn sao là public data thì chị nghĩ là được hết đó em

  • @diemquyentran7729
    @diemquyentran7729 2 года назад

    Dạ cho em hỏi task 4 là thu thập hết thông tin của từng profile mà trong task 3 mình đã thu thập url đúng không ạ

  • @baothaivuong1463
    @baothaivuong1463 3 года назад

    tạo acc clone để crawl dữ liệu thì sau khi search từ khóa tên người dùng bị đổi thành Linkedln Member có cách nào khắc phục không chị?

    • @BoringPPL
      @BoringPPL  3 года назад

      Khi search người dùng bị đổi thành Linkedin Member là do người dùng đó không cho phép người lạ (là những người không phải 1st, 2nd, 3rd degree connection) xem thông tin của mình. Khi gặp vấn đề này thì em chỉ có thể kết nối với nhiều người dùng để mở rộng network của mình rồi mới xem được nhiều tài khoản hơn thui

  • @huyle-ve8qi
    @huyle-ve8qi 3 года назад

    Hello c :) c ơi nếu trong trường hợp e muốn lấy tất cả các trang thi khi đến trang cuối button "Next" sẽ bị disable k còn click được nữa thì lúc đo chương trình sẽ bị lỗi thì cách lặp sẽ ntn ạ ?

    • @BoringPPL
      @BoringPPL  3 года назад +2

      hello em, nếu vậy thì em viết code ở dạng try except nha, vd mẫu:
      try:
      next_button.click()
      except NoSuchElementException:
      pass
      Code này nghĩa là chương trình của em sẽ thử click vào nút next_button, nếu click được thì oke nó sẽ bỏ qua phần except, nhưng nếu không click được do lỗi NoSuchElementException thì chương trình sẽ thực hiện dòng lệnh bên dưới, khi đó "pass" có nghĩa là bỏ qua cái nút này và chạy dòng lệnh tiếp theo.
      Link tham khảo: stackoverflow.com/questions/38022658/selenium-python-handling-no-such-element-exception/38023345

  • @sonnguyenthanh6811
    @sonnguyenthanh6811 Год назад

    Chị ơi, sẽ ra sao nếu hit limitation từ Linkedin, như này 1 nick chỉ quét được khoảng 60-70 là bị chặn rồi

    • @BoringPPL
      @BoringPPL  Год назад

      helluu em! chị làm video này hồi 2 năm trước ó giờ Linkedin đã có nhiều thay đổi và cũng chặn bot gắt gao hơn ahuhu chị cũng chưa xem lại nên cũng ko còn nắm tình hình nữa.

  • @nguyentheat5367
    @nguyentheat5367 3 года назад

    14:39
    Trong quá trình làm, đến đoạn send_keys(Keys.RETURN) để ấn nút enter để search mình gặp lỗi 'Message: element not interactable
    (Session info: chrome=92.0.4515.159)' mà mình không biết lỗi do phiên bản của chrome k, mong bạn giải đáp

    • @BoringPPL
      @BoringPPL  3 года назад

      hello bạnnn, lỗi này có khả năng cao là do bạn định vị nhầm element rồi á, bạn đang định vị vào 1 cái elements mà không bấm Enter được

  • @gocnhincuocsong7620
    @gocnhincuocsong7620 3 года назад

    e dùng sublime text nhưng viết code xong CTR B ko hiện ra đc màn hình web linkedin thì phải làm j để show đc chị nhỉ ?

    • @BoringPPL
      @BoringPPL  3 года назад +1

      hello em, em thử mở terminal của máy tính ra rồi chạy chương trình trên terminal xem được không

  • @nobitpham
    @nobitpham 2 года назад

    Cho mình hỏi nếu muốn download cả file pdf cv của các profile thì nên làm theo hướng nào là tối ưu nhất ạ?

    • @BoringPPL
      @BoringPPL  2 года назад

      mình cũng chưa làm case này nên cũng không rõ cách nào tối ưu nhất. ở bước định vị thì mình nghĩ là cũng giống với định vị các element khác, dùng try pass để bỏ qua các profile không có CV PDF. còn ở bước lưu trữ thì dùng thêm thư viện request, bạn có thể tham khảo ở đây nhé ruclips.net/video/N__r-d3pjKg/видео.html

    • @nobitpham
      @nobitpham 2 года назад

      @@BoringPPL Mình tìm cái file resume trên Linkedin ở nút More cũng không thấy luôn huhu

    • @BoringPPL
      @BoringPPL  2 года назад

      @@nobitpham không phải ai cũng attach resume trên linkedin ấy bạn 😅😅

  • @ngohoang5451
    @ngohoang5451 2 года назад

    Hi bạn, cảm ơn bạn vì video rất hữu ích. Mình đang tự học lập trình và mới bắt đầu.
    Mình gặp lỗi name "null" is not defined. Mình loay hoay mãi mà chưa hiểu vì sao. Chắc do lỗi lưu file gì đó mà mình chưa biết cách khắc phục. Bạn giải thích dùm mình và giúp mình với được không? Cảm ơn bạn nhiều.

    • @BoringPPL
      @BoringPPL  2 года назад

      hello bạn. chắc do bạn đang dùng một biến nào đó tên "null" mà trước đó bạn chưa định nghĩa biến á

  • @SatLinh0901
    @SatLinh0901 2 года назад

    JavaScript có cái nào tương tự v ko ạ

    • @BoringPPL
      @BoringPPL  2 года назад +1

      chị không rành JS nên cũng ko chắc nữa, nhưng nghe đồn dùng Node làm dc, làm nhanh hơn Python nhiều luôn á

  • @nguoilacquan5707
    @nguoilacquan5707 3 года назад

    Mình đang dùng IDE nào vậy chị?

    • @BoringPPL
      @BoringPPL  3 года назад +1

      Mình dùng Jupyter Notebook trên Visual Studio Code bạn nhé

  • @Giang_as_artist
    @Giang_as_artist 3 года назад

    sau khi em tìm search_field, sau đó dùng send_keys('bla bla') thì báo lỗi element not interactable. Em tìm cách khác là ấn vào biểu tượng search, sau đó sẽ hiện ra phần input để mình nhập cái mình cần tìm. Tới đây nên viết gì để có thể send keys được ạ.

    • @BoringPPL
      @BoringPPL  3 года назад

      Hello em, em coi chừng cái khung cửa sổ browser lúc selenium mở lên nó hẹp quá nên không tìm dc search_field, em thử điều chỉnh lại size của cửa sổ cho rộng ra xem còn bị lỗi này không nhé.
      Cách sửa: stackoverflow.com/questions/23381324/how-can-i-control-chromedriver-open-window-size

    • @trongpham9999
      @trongpham9999 3 года назад

      Mình cần bung hết cỡ cái màn hình Chrome ra, một cách tự động thì chèn thêm 1 câu code này:
      driver = webdriver.Chrome()
      # Maximizing window
      driver.maximize_window()

  • @kids114114
    @kids114114 3 года назад

    Bạn ơi, cho mình hỏi công cụ để viết code code của bạn tên gì vây?

    • @BoringPPL
      @BoringPPL  3 года назад

      hello bạn, mình dùng Visual Studio Code, cài thêm 2 extension là Python và Jupyter để sử dụng Jupyter Notebook trên VSC nhé

    • @kids114114
      @kids114114 3 года назад

      @@BoringPPL Cám ơn bạn nhé!

  • @phongtruong824
    @phongtruong824 3 года назад

    Em làm tới bước sendkey:
    email_field = driver.find_element_by_id('username')
    email_field.send_keys('youremail')
    nhưng không tự động điền youremail vào khung. Chị giúp em kiểm tra có bị lỗi gì không?

    • @BoringPPL
      @BoringPPL  3 года назад +1

      hello em, máy có báo lỗi gì không em? em thử tắt hết các trình duyệt rồi chạy lại xem

    • @phongtruong824
      @phongtruong824 3 года назад

      @@BoringPPL Cảm ơn chị đã phản hồi. Máy tính có phản hồi như bên dưới ạ.
      Copyright (C) Microsoft Corporation. All rights reserved.
      Try the new cross-platform PowerShell aka.ms/pscore6
      PS C:\Users\User> & C:/Users/User/AppData/Local/Programs/Python/Python39/python.exe c:/Users/User/Desktop/hoc.py
      DevTools listening on ws://127.0.0.1:51249/devtools/browser/c0e47302-6e68-45f2-a267-6ee6f48a2560
      [8284:12796:0704/141906.547:ERROR:device_event_log_impl.cc(214)] [14:19:06.547] USB: usb_device_handle_win.cc:1058 Failed to read descriptor from
      node connection: A device attached to the system is not functioning. (0x1F)
      [8284:12796:0704/141906.549:ERROR:device_event_log_impl.cc(214)] [14:19:06.549] USB: usb_device_handle_win.cc:1058 Failed to read descriptor from
      node connection: A device attached to the system is not functioning. (0x1F)
      Traceback (most recent call last):
      File "c:\Users\User\Desktop\hoc.py", line 9, in
      credential = open('1.txt')
      FileNotFoundError: [Errno 2] No such file or directory: '1.txt'
      PS C:\Users\User>

  • @nongquan5880
    @nongquan5880 3 года назад

    Bạn ơi, bạn chạy code tiếp mà không phải đăng nhập lại là kiểu gì vậy?

    • @BoringPPL
      @BoringPPL  3 года назад +1

      hello bạn, bạn dùng jupyter notebook/prompt shell thay vì python file nhe. chạy xong code cell để login rồi thì xuống cell bên dưới viết tiếp.

  • @stayhome1756
    @stayhome1756 3 года назад +1

    Mình làm theo video hết phần task 1 thì thông báo ở LinkedIn là: "Let's do a quick verification
    The login attempt seems suspicious. To finish signing in please enter the verification code we sent to your email address."Sau đó có gửi mã xác nhận vô email. ==> Mình hiểu là kiểu mình đăng nhập giống bot quá nên bị nghi ngờ thì phải xử lý như nào ạ. Mình cảm ơn

    • @BoringPPL
      @BoringPPL  3 года назад +1

      Hello bạn, bạn hiểu đúng rồi đó. Để tránh việc đăng nhập quá nhiều lần trong khung thời gian ngắn, trong quá trình viết code và test code, bạn nên sử dụng các code editor có từng cell một vd như Jupyter Notebook, iPython Notebook, Prompt Shell, Google Colab, etc. để sau khi hoàn thành phần Đăng nhập, bạn có thể thao tác tiếp tục ở các code cell bên dưới thay vì việc chạy cả một file code thì bạn sẽ cứ phải đăng nhập lại mỗi lần chạy. Cụ thể trong video hướng dẫn mình sử dụng Jupyter Notebook trên Visual Studio Code, bạn sẽ thấy mình đăng nhập 1 lần thôi rồi sau đó chuyển sang các task khác bằng cách sử dụng các code cell bên dưới :D

    • @nguyenvanhuy2145
      @nguyenvanhuy2145 2 года назад

      @@BoringPPL Pycharm có tạo được từng cell như này ko bạn?

  • @hoangtinho1642
    @hoangtinho1642 3 года назад

    Bạn có cách nào để chỉnh phần nhập thông tin chậm không . Thay vì nó bắn vèo vèo . Như autotype set time nhập chậm lại ấy

    • @BoringPPL
      @BoringPPL  3 года назад

      Hellu bạn, mình có thể lặp qua từng ký tự nhập vào rồi dùng sleep á, thay vì code như này
      email_box = driver.find_element_by_id("element-id")
      email_box.send_keys("youremail")
      thì đổi thành vầy:
      email_box = driver.find_element_by_id("element-id")
      your_email = "youremail"
      for character in your_email:
      email_box.send_keys(character)
      time.sleep(0.3) # pause for 0.3 seconds
      Còn nếu bạn muốn thời gian nghỉ nó random chút kiểu 0.1, 0.3, 0.2s đồ thì bạn dùng thư viện random nhé
      Source: stackoverflow.com/questions/42891515/how-to-slow-down-the-speed-of-send-keys-action-in-a-selenium-script-using-python

    • @hoangtinho1642
      @hoangtinho1642 3 года назад

      @@BoringPPL thank bạn nha hay qá

    • @hoangtinho1642
      @hoangtinho1642 3 года назад

      Mình thử time.sleep(random.randint(0.1, 0.5)) và import random rồi nhưng nó chạy đúng ký tự đầu và đứng lại bạn fix giúp mình với

    • @hoangtinho1642
      @hoangtinho1642 3 года назад

      Í mình làm dc rồi nhé ham randint tra về số nguyên / còn random.uniform(dungcho float)

    • @BoringPPL
      @BoringPPL  3 года назад

      @@hoangtinho1642 cool bạn

  • @nguyentanviet19
    @nguyentanviet19 3 года назад

    thanks bạn nhiều, mình đã trộm dc dữ liệu từ trang ebay @@

    • @BoringPPL
      @BoringPPL  3 года назад +1

      uay hehe chúc mừng bạn :D

  • @sonnguyenngoc7436
    @sonnguyenngoc7436 2 года назад

    Em chào chị, em đang ở cuối task 3, khi chạy code thì đã lấy được thông tin theo từng link, nhưng có link bị lỗi là: 'NoneType' object has no attribute 'find' và code tự dừng lại. Chị cho em hỏi em phải xử lí đoạn này như thế nào ạ?

    • @BoringPPL
      @BoringPPL  2 года назад

      hello em, chị đoán có thể là do trang chưa kịp load xong nên element đó không tìm được, nên máy tính trả về "NoneType", chị nghĩ em có thể thử
      - cho sleep lâu hơn để trang load hết
      - hoặc tối ưu hơn là dùng implicit wait của thư viên selenium (em search keyword này nhé)
      In the meantime thì em có thể cho đoạn code của mình vào try: ... except: để lỡ có không tìm thấy element thì code vẫn chạy tiếp không bị gián đoạn

  • @longbow8265
    @longbow8265 2 года назад

    bạn ơi mình tự động đăng nhập vào linkedin bây h nó toàn bắt phải verify, có phải do ip của mình hay do tài khoản của mình bị linkedin hạn chế ko bạn nhỉ?

    • @BoringPPL
      @BoringPPL  2 года назад

      hello bạn, đúng rùi đó bạn đăng nhập nhiều quá thì IP device của bạn bị Linkedin flag á. mình nghĩ bạn nên dừng vài ngày, hoặc tìm cách đổi IP. với cả lúc code để tránh đăng nhập nhiều lần thì mình dùng Jupyter Notebook thay vì file .py nha, nếu dùng Jupyter Notebook thì nó bắt bạn verify bạn cứ verify thủ công thôi rồi xuống code cell mới code tiếp :D

    • @longbow8265
      @longbow8265 2 года назад

      @@BoringPPL thanks bạn nhé

  • @MienManMoMong
    @MienManMoMong 2 года назад

    Em muốn tách bước 4 ra thành hai bước, lấy thông tin lưu vào mảng sau đó mới lấy dữ liệu từ mảng xuất ra file csv theo vòng lặp thì phải làm như thế nào ạ tại vì dữ liệu em lấy tận 80 dòng, em cảm ơn chị.

    • @BoringPPL
      @BoringPPL  2 года назад

      hello em. em làm theo thao tác từ 28:14 - 28:34 để lấy dữ liệu thôi, sau đó em lưu vào mảng theo ý em, có mảng rồi thì em làm từ 28:50 để lấy giá trị trong mảng lưu vào csv

    • @MienManMoMong
      @MienManMoMong 2 года назад

      @@BoringPPL Em tạo function
      def All_Data()
      giá trị trả về là thông tin trong mảng, sau đó em cho
      Product_CSV = All_Data()
      Product_CSV.to_csv('output.csv')
      thì bị lỗi
      'list' object has no attribute 'to_csv'
      ------
      Em có thử in ra mảng
      print(All_Data())
      sau đó em thử làm riêng
      df = pd.DataFrame(...)
      ... copy toàn bộ đoạn data vừa in
      df.to_csv('output.csv')
      thì lại lưu file csv được, em hơi bị lúng túng từ ngữ nhưng mong chị giải đáp ạ

    • @BoringPPL
      @BoringPPL  2 года назад +1

      @@MienManMoMong à khi dùng cú pháp em chịu khó đọc thêm documentation nha. Ví dụ cú pháp em dùng là .to_csv (đường dẫn: pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html) trên documentation hướng dẫn là em phải dùng to_csv lên một dataframe mới được, ở trường hợp 1 bị lỗi "'list' object has no attribute 'to_csv'" do em dùng .to_csv lên một list
      còn đợt 2 lúc em thử lại chị chưa nắm được cách em làm lắm nhưng nhìn sơ thì có vẻ là do em đã convert mảng của em qua dataframe rồi nên em lưu được mảng vào csv

  • @ThanhsonKG
    @ThanhsonKG 3 месяца назад

    Mới bắt đầu học mà nhìn bạn viết code mà rối não quá

  • @loixuan2154
    @loixuan2154 2 года назад

    thông tin hình như bên linkedin đã khóa lại rồi hay sao ấy chị? Không thể tương tác được.

    • @BoringPPL
      @BoringPPL  2 года назад +1

      hello em, em đang nói đến bước nào ấy nhỉ? có nhiều lý do để code ko chạy lắm em :D

    • @loixuan2154
      @loixuan2154 2 года назад

      @@BoringPPL Task 3 chị. bên Linkedin đã khóa lại thông tin user nên không thể kéo dữ liệu về được chị ạ

    • @BoringPPL
      @BoringPPL  2 года назад

      ​@@loixuan2154 em nhận được thông báo gì từ Linkedin hoặc từ máy tính để kết luận như vậy ấy nhỉ? tại vì thông tin nó nằm trên page source, chị inspect vào vẫn thấy thông tin nằm trên đấy, nên chị chưa hiểu ý em "khoá" là sao :D

    • @loixuan2154
      @loixuan2154 2 года назад

      @@BoringPPL Em làm theo hướng dẫn thì đến task 3 có vài sự khác với chị á.
      1. Giao diện em khác với giao diện chị
      2. khi click vào hồ sơ của mỗi người thì sẽ thống báo "You don’t have access to this profile
      The profiles of members who are outside your network have limited visibility. To access more member profiles, continue to grow your network." như này nè chị

    • @BoringPPL
      @BoringPPL  2 года назад +1

      @@loixuan2154 à chị hiểu rồi, nếu em gặp lỗi đó thì lý do là vì những profile em chọn họ đang ở chế độ không cho em truy cập tài khoản của họ á, cái này một phần chị đoán có thể do tài khoản linkedin của em chưa có nhiều bạn lắm, nên không có nhiều 1st, 2nd, 3rd-degree network. vấn đề này là do tài khoản cá nhân ấy em, không phải vấn đề kỹ thuật

  • @stevennguyen2944
    @stevennguyen2944 3 года назад

    Cho mình hỏi sao cứ ghi csv đến profile thứ 4 là gặp lỗi "UnicodeEncodeError: 'charmap' codec can't encode character '\u1ec5' in position 4: character maps to " đã tìm các cách ghi khác nhưng vẫn dính lỗi tương tự

    • @BoringPPL
      @BoringPPL  3 года назад

      hellu bạn, thiệt sự là mình cũng chưa gặp qua lỗi này bao giờ nhưng mình search thì thấy người ta chỉ là hãy encode cái phần đó của bạn, mình chia sẻ cách làm bạn tự implement thử nhé:
      Source 1: ruclips.net/video/TumTf8-wY1k/видео.html
      Source 2: github.com/llSourcell/twitter_sentiment_challenge/issues/1

  • @musicl2363
    @musicl2363 3 года назад

    Thanks ban
    Video rat hay
    minh dang bi loi o Task 1 phan click nut signin: AttributeError: 'list' object has no attribute 'click'
    ban ho tro nhe!

    • @BoringPPL
      @BoringPPL  3 года назад

      hello bạn, code bạn định vị nút signin thế nào ấy nhỉ? do giá trị trả về từ biến định vị nút signin của bạn đang là một list nên selenium không click vào được ấy bạn

    • @musicl2363
      @musicl2363 3 года назад

      signin_field = driver.find_elements_by_xpath('//*[@id="app__container"]/main/div[2]/form/div[3]/button')
      signin_field.click()
      Monh code y nhu ban a

    • @BoringPPL
      @BoringPPL  3 года назад +1

      @@musicl2363 "find_element" thôi bạn, bạn dùng "find_elements" nó trả về list ấy nên bạn không click dc 😅 này hog có y chang nha hehe

  • @LocTran-tv4rb
    @LocTran-tv4rb 3 года назад

    Dạ chị ơi, mỗi lần em chạy code, chương trình đều chạy tuần tự Login to Facebook, input user, getdata,... nên mỗi lần fix lỗi chương trình chạy rất mất thời gian. Trong khi code chị thì chạy tiếp tục từ bước trước đó. vd đang ở bước login to fb, viết tiếp code input user thì chương trình không cần chạy bước trước đó nữa. Phải làm như nào vậy chị

    • @BoringPPL
      @BoringPPL  3 года назад

      Helluu em, hồi trước lúc mới chạy chị cũng gặp vấn đề như em vậy nên thay vì dùng python source (file.py) chị chuyển qua dùng code editor là Jupyter Notebook (file.ipynb) hoặc Interactive Shell để có thể chạy từng code block nhỏ mà không cần phải chạy lại toàn bộ chương trình.
      Em có thể tải Jupyter Notebook ở đây jupyter.org/
      hoặc nếu em dùng Visual Studio Code giống chị thì có thể cài extension Jupyter Notebook là sẽ ra giao diện y chang video hướng dẫn nhé code.visualstudio.com/docs/python/jupyter-support

    • @LocTran-tv4rb
      @LocTran-tv4rb 3 года назад +1

      @@BoringPPL Yeah cảm ơn chị ạ!
      Chúc kênh ngày càng phát triển

  • @timmonreview
    @timmonreview 2 года назад

    Không biết bạn có thấy cmt của mình không, mình thấy code của bạn mỗi lần viết xong sẽ ẩn đi và cod nút play để chạy từng đoạn code sau mà ko cần thực thi hết, ko biêtd tính năng này chỉ có trên macbook thôi phải ko, trên windows ko biết có không

    • @BoringPPL
      @BoringPPL  2 года назад +1

      helluu bạn, do mình dùng Jupyter Notebook (đuôi file .ipynb) trên VSCode thay vì dùng file python (đuôi file .py) ấy bạn. dùng Jupyter Notebook sẽ có từng code cell thay vì chạy cả script

    • @sumontimtech
      @sumontimtech 2 года назад

      @@BoringPPL người đẹp ơi, ở phần claw link data thì nó chỉ craw có 1 người thôi, sau khi dùng BeautifulSoup thì không cho nó đứng chung biến với mấy cái nằm ở trên được, phiền bạn có thể hướng dẫn mình phần này không, không biết giải thích sao để bạn có thể hiểu được hix

    • @BoringPPL
      @BoringPPL  2 года назад

      @@sumontimtech helluu bạn, bạn giúp mình đăng bài vào page này đính kèm hình để được hỗ trợ tốt hen nhe

  • @trongpham9999
    @trongpham9999 3 года назад

    Mình tới đoạn 12:11 log in vào LinkedIn thì gặp phải:
    - yêu cầu nhập Verify code qua SMS,
    - vì Chrome Driver mỗi lần chạy là 1 cửa sổ mới hoàn toàn nên bước Verify này sẽ luôn được gọi lại và trả về 1 code qua SMS
    Vậy có cách nào để skip được qua bước này không?
    Hay bạn chỉ thêm 1 đoạn code để có thể đợi và input Verify code này vào rồi mới đăng nhập tiếp.
    Cảm ơn rất nhiều,

    • @trongpham9999
      @trongpham9999 3 года назад

      Mình đã tự giải quyết phần Verify bằng cách vào Setting của LinkedIn > và tắt phần Verify đi, thì không cần phải nhập code qua SMS nữa.
      Cảm ơn,

    • @trongpham9999
      @trongpham9999 3 года назад

      Hy vọng bạn sẽ tiếp tục ra nhiều video hơn,
      Có thể giảm thiểu hiệu ứng để giảm thiểu thời gian render video cũng được, nội dung của bạn rất lôi cuốn và thực tiễn.
      Cảm ơn bạn và cả team!

    • @BoringPPL
      @BoringPPL  3 года назад

      @@trongpham9999 cảm ơn bạn nhiều nhaa

  • @ReadmeVN
    @ReadmeVN 3 года назад

    chị dùng ide gì vậy ạ

    • @BoringPPL
      @BoringPPL  3 года назад +1

      chị dùng Visual Studio Code, tải thêm 2 extension tên là Python và Jupyter xong tạo file đuôi .ipynb là được ấy. chị có demo ở phút 3:14

  • @aiviet5497
    @aiviet5497 Год назад

    Hi pretty girl.

  • @ToanNguyen-1106
    @ToanNguyen-1106 3 года назад

    Mình gặp lỗi này: UnicodeEncodeError: 'charmap' codec can't encode character '\u1ec5' in position 4: character maps to .
    Mình có thử thêm encode('utf-8'): name = info_div.find('h1').get_text().encode('utf-8') thì không còn lỗi. nhưng khi mở file .cvs ra thì tên tiếng việt hiển thị không đẹp.

    • @BoringPPL
      @BoringPPL  3 года назад

      thường thì tiếng Việt nó dễ bị lỗi này do mấy cái dấu trong tiếng Việt á bạn, bạn tham khảo thử bài này nhé nguyenvanhieu.vn/xu-ly-tieng-viet-trong-python/

  • @chauvanloifpldn1381
    @chauvanloifpldn1381 3 года назад

    nếu em chạy riêng một mình task4 thì có xảy ra lỗi k ạ

    • @BoringPPL
      @BoringPPL  3 года назад

      hello em, em chỉ cần đảm bảo em có đủ những dữ liệu cần cho task 4 là chạy được thôi

  • @witchdoctor3897
    @witchdoctor3897 3 года назад +1

    Em chào chị ạ, em viết lại code mà đến dòng: search_field = driver.find_element_by_xpath('//*[@id="ember26"]/input'), máy em báo lỗi ko chạy tiếp dc ạ, chị chỉ giúp em với ạ, em cám ơn nhiều ạ

    • @witchdoctor3897
      @witchdoctor3897 3 года назад

      của em bị lỗi này ạ Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="ember19"]/input"}
      (Session info: chrome=89.0.4389.114)

    • @BoringPPL
      @BoringPPL  3 года назад

      ​@@witchdoctor3897 Hellu emm, trong video chị có đề cập một khái niệm là "Dynamic Element" (ở phần locate nút Next) là dạng thành phần mà cứ mỗi lần em reload trang web là nó sẽ lại thay đổi cái ID của nó (vd lần 1 em truy cập ID là "ember26", reload trang thì ID lại thành "ember19"). Hồi lúc chị làm video thì nút Search nó không phải Dynamic Element nên mình tìm bằng xpath với ID được, giờ thì chắc Linkedin đã đổi rồi nên em có thể sửa bằng cách thay vì dùng xpath với ID thì hãy dùng xpath với class nhé, em thay cú pháp như này là chạy được nè:
      search_field = driver.find_element_by_xpath('//*[@class="search-global-typeahead__input always-show-placeholder"]')
      Nếu muốn học cách cấu thành xpath theo ý muốn của em, trong video này ở phút 18:40 chị có chia sẻ kỹ hơn về cách cấu thành xpath ( ruclips.net/video/99IqWzIZ8vM/видео.html ). Nếu em biết cách tự viết xpath thì em có thể chấp hết Dynamic Element luôn.
      Em cũng có thể đọc thêm về cách cấu thành 1 xpath trong documentation phần này: selenium-python.readthedocs.io/locating-elements.html#locating-by-xpath

    • @witchdoctor3897
      @witchdoctor3897 3 года назад

      @@BoringPPL em cám ơn chị nhiều lắm ạ, mà giờ lại phát sinh thêm một lỗi mới ạ, em đã tự tìm hiểu mà ko sửa dc ạ. Mong chị giúp em với ạ
      Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='search-global-typeahead__input always-show-placeholder']"}
      (Session info: chrome=89.0.4389.114)

    • @BoringPPL
      @BoringPPL  3 года назад

      ​@@witchdoctor3897 Ồ em định vị bị sai rùi í, sai ở chỗ '//div[...]' . Có 2 cách sửa:
      Cách 1: Nếu em inspect phần khung search sẽ thấy phần code biểu thị cho nút search là có nghĩa là tên tag chứa thành phần này là "input" chứ không phải tag "div" --> Em sửa code thành '//input[@class="search-global-typeahead__input always-show-placeholder"]' là chạy được (thay code của em từ div sang input)
      Cách 2: Nếu em nhìn lại comment trên sẽ thấy chị dùng dấu * ở chỗ '//*[...]' chứ không nêu cụ thể tên 1 tag nào. Cách làm này thì em đỡ định vị sai vì * nghĩa là máy tính sẽ đi qua hết tất cả nodes trong trang đó và tìm ra tên class mà em yêu cầu. Tuy nhiên cách này không tối ưu trong trường hợp tên class bị trùng và xuất hiện ở nhiều tag khác nhau, lúc này máy tính sẽ lấy giá trị của tag đầu tiên mà nó tìm thấy thì nhiều khi không đúng (vd thành phần em cần tìm ở cuối trang mà có thành phần khác có tên class trùng nằm ở đầu trang thì máy tính sẽ định vị nhầm thành phần ở đầu)

    • @witchdoctor3897
      @witchdoctor3897 3 года назад

      @@BoringPPL em cám ơn ạ, em làm dc rồi ạ.

  • @dungbuitoan6879
    @dungbuitoan6879 3 года назад

    tớ có 1 lỗi là web chạy lên đc 1 lúc thì lại tắt là sao vậy ạ?

    • @BoringPPL
      @BoringPPL  3 года назад

      hello cậu, tớ cũng chưa hình dung lỗi này lắm, terminal của cậu có báo lỗi gì không nhỉ?

    • @dungbuitoan6879
      @dungbuitoan6879 3 года назад

      @@BoringPPL à chắc vì mình chỉ dùng visual, nay dùng jupiter chạy ok rồi ạ. Nhưng không biết có phải do tài khoản linkedin không có quyền xem không mà k tìm đc ID của người dùng :))
      cám ơn những bài b chia sẻ.
      cố xem hết rồi làm theo ạ.
      đang muốn học ngành data này mà k biết bắt đầu từ đâu á :)

    • @BoringPPL
      @BoringPPL  3 года назад +1

      @@dungbuitoan6879 cũng có thể do bạn không có mutual connection nên họ không cho bạn xem profile á :D
      bạn cứ search youtube làm data bắt đầu từ đâu mình thấy nhiều anh chị chia sẻ lắm, good luck bạn