CÓ THỂ BẠN QUAN TÂM:
Lập trình Bot kéo Dữ liệu Người dùng Linkedin (Python & BeautifulSoup):
Lập trình Bot tự động Kết nối & Gửi tin nhắn trên Linkedin (Python & Selenium):
GROUP HỎI ĐÁP:
Group hỏi đáp Python ứng dụng:
Group hỏi đáp Python cơ bản:
TIMESTAMP
0:14 Giới thiệu Vấn đề
1:30 Lên kế hoạch cho chương trình, chia nhỏ vấn đề
2:33 Task 1: Tự động Đăng nhập vào Linkedin
3:21 Cài đặt và Import Selenium và Chromedriver
5:22 Task 1.1: Tự động khởi tạo trình duyệt Chrome, và Chuyển đến đường dẫn mong muốn
6:24 Task 1.2: Định vị và Tương tác với các thành phần trên website (khung đăng nhập, nút đăng nhập)
9:51 Cài đặt & Import time module để giảm tốc độ thực thi của máy
10:38 Tips: Cách ẩn thông tin đăng nhập
12:27 Task 2: Tự động tìm kiếm Profile mong muốn
12:46 Định vị và Tương tác với Khung Tìm Kiếm trên Linkedin
14:45 Task 3 Thu thập đường dẫn đến tất cả Profile
14:58 Cài đặt & Import BeautifulSoup4
15:24 Task 3.1: Thu thập đường dẫn trên 1 trang
19:32 Task 3.2: Chuyển hướng sang các trang tiếp theo và Lặp lại hành động
24:24 Task 4: Thu thập thông tin của 1 Profile, và Lưu thông tin vào file CSV
24:46 Task 4.1: Thu thập thông tin của 1 profileScrape the data of 1 Profile. Lặp lại hành động cho tất cả Profile đã thu thập được trước đó
28:33 Cài đặt & Import CSV module
28:49 Task 4.2: Lưu dữ liệu vào file CSV
SOURCE CODE:
WHY WE STARTED THIS?
We are a group of hiring managers from bluechip companies and high growth startups. Most of the time, when the candidate comes for an interview, they don’t seem to have the right skill sets or the right mindset to think about a real-world problem. There is a disconnect between what the industry needs and what the candidates are taught in school/ on MOOCs courses.
During Covid, millions of people losing their job. We’re uncertain what’s ahead of us. In the next 3-5 years, if you cannot catch up with the world movement and possess demanding skills, you will be out of a job in no time. Don’t wait until too late!
Follow us:
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ý: https://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
sao mình làm nó báo là k có thuộc tính find. element.by_ID nhỉ
Hi pretty girl.
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 ạ
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 ạ
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
nghe chị phát âm đã quá, mong chị ra nhiều video hơn nữa!!!
thanks very much
Anh muốn đăng ký học python với BoringPpl thì liên hệ như thế nào em ha?
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.
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?
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 😢
Kênh này hay thế nhỉ :3
Code gọn, sạch mà dễ hiểu
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!
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
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ị ?
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?
phát âm tiếng anh của bạn rất ấn tượng
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
Dạ em bị stuck ở task 2, khi nhập giá trị vào ô tìm kiếm ạ – bị báo lỗi là ElementNotInteractableException. Dưới đây là vị trí em gán, mong mọi người giúp đỡ với ạ 😢. Em xin cảm ơn nhiều nhiều
search_field = driver.find_element('xpath','//*[@class="search-global-typeahead__input always-show-placeholder"]')
search_field.send_keys("Software Engineer People")
JavaScript có cái nào tương tự v ko ạ
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 ạ
Dạ cho em xin code github bài này nhen, em cảm ơn ạ
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.
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ị.
m bị mở lên phát tắt luôn
Clip bạn hay. Nhưng chất lượng hình ảnh hơi kém. Khó nhìn qué
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.
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 ạ?
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ỉ?
I couldn't understand the language but loved your tutorial, thanks….i think i saw the english version somewhere.🤔
1 URLs_all_page=GetURLPages()
2 with open('output.csv', 'w', newline = '') as file_output:
3 headers = ['Name', 'Job Title', 'Location']
4 writer = csv.DictWriter(file_output, delimiter=',', lineterminator='n',fieldnames=headers)
5 writer.writeheader()
6 for linkedin_URL in URLs_all_page:
7 browser.get(linkedin_URL)
8 print('- Accessing profile: ', linkedin_URL)
9 sleep(3)
10 page_source = BeautifulSoup(browser.page_source, "html.parser")
11 info_div = page_source.find('div',{'class':'mt5 relative'})
12 info_loc=info_div.find_all('div',{'class':'pv-text-details__left-panel'})
13 name = info_loc.find('h1', class_='text-heading-xlarge inline t-24 v-align-middle break-words').get_text().strip()
14 print('— Profile name is: ', name)
15 info_loc1=info_div.find_all('div',{'class':'pb2 pv-text-details__left-panel'})
16 location = info_loc1.find('span', class_='text-body-small inline t-black–light break-words').get_text().strip()
17 print('— Profile location is: ', location)
18 title = info_loc.find('div', class_='text-body-medium break-words').get_text().strip()
19 print('— Profile title is: ', title)
20 print('n')
21 writer.writerow({headers[0]:name, headers[1]:location, headers[2]:title})
Chị ơi, html của Linkedln đã có thay đổi nên em đã chỉnh sửa nhưng code vẫn chỉ chạy đến print Linkedln_URL là dừng và báo lỗi rồi ạ, không biết làm thế nào cho đúng, mong chị phản hồi sớm ạ (em lấy bài này làm đề tài cho môn học nhưng đến đoạn này thì bí quá)!
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ỉ?
xịn quá c ơi kkk
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
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 ạ?
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!
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?
ok bạn xứng đáng 1m likes !