Selenium Web Scraping – Mọi thứ bạn cần biết vào năm 2025

Hướng dẫn , Proxy , Python , Thu thập dữ liệu ,Ngày 06 tháng 05 năm 20225 phút đọc

Thu thập dữ liệu là một thuật ngữ đã được sử dụng rất nhiều trong thập kỷ qua. Mọi công ty đều muốn biết đầy đủ về khách hàng của mình để tổ chức có thể phát triển chiến lược tốt nhất nhằm giải quyết các vấn đề của mọi người. Thông thường, các tổ chức dựa trên công nghệ có hồ dữ liệu để lấy dữ liệu để phân tích. Nhưng đôi khi, họ phải thu thập dữ liệu trực tuyến để

Thu thập dữ liệu là một thuật ngữ đã được sử dụng rất nhiều trong thập kỷ qua. Mọi công ty đều muốn biết đầy đủ về khách hàng của mình để tổ chức có thể phát triển chiến lược tốt nhất nhằm giải quyết các vấn đề của mọi người. Thông thường, các tổ chức dựa trên công nghệ có hồ dữ liệu để lấy dữ liệu để phân tích. Nhưng đôi khi, họ phải thu thập dữ liệu trực tuyến để phân tích khác nhau, chẳng hạn như phân tích tình cảm, phân tích SEO và giám sát. Thu thập dữ liệu web là phương pháp trích xuất dữ liệu từ một nguồn mục tiêu và lưu trữ trong bộ nhớ cục bộ hoặc đám mây. Python là ngôn ngữ lập trình tốt nhất để thực hiện thu thập dữ liệu web. Có nhiều thư viện trong Python có thể giúp bạn thu thập dữ liệu từ các trang web, blog và các nguồn trực tuyến khác. Những thư viện nổi tiếng nhất là BeautifulSoup và Selenium. Trong bài viết này, chúng ta sẽ xem cách thực hiện thu thập dữ liệu web bằng selenium.

Web Scraping là gì?

Web scraping là trích xuất một lượng lớn dữ liệu từ nhiều trang web trực tuyến. Ngày nay, những người mới bắt đầu học máy và AI đầu tư rất nhiều thời gian để tìm hiểu các cách khác nhau để thu thập dữ liệu web. Web scraping bao gồm hai phần, cụ thể là trình thu thập dữ liệu và trình thu thập dữ liệu. Trình thu thập dữ liệu có trách nhiệm tìm và định vị dữ liệu cần thiết từ nguồn mục tiêu, sau đó trình thu thập dữ liệu giúp trích xuất dữ liệu đó từ nguồn.

Selen – Nó là gì?

Selenium là một thư viện python miễn phí và mã nguồn mở, là một khuôn khổ kiểm thử tự động chủ yếu được sử dụng để kiểm thử và xác thực các ứng dụng web trên nhiều trình duyệt khác nhau. Bạn có thể sử dụng bất kỳ ngôn ngữ lập trình nào, chẳng hạn như C#, Java và ngôn ngữ yêu thích của tôi là Python. Phần mềm Selenium là một bộ công cụ bao gồm:

  • Môi trường phát triển tích hợp Selenium (IDE).
  • Điều khiển từ xa Selenium.
  • Trình điều khiển web.
  • Lưới Selenium.

Hãy cùng xem cách sử dụng Selenium với Python để tự động hóa toàn bộ quá trình thu thập dữ liệu web.

Phát biểu vấn đề:

Chúng tôi muốn thu thập tên và mức lương của các cầu thủ NBA trong thập kỷ qua, sau đó lưu dữ liệu ở định dạng khung dữ liệu. LƯU Ý: Để tìm hiểu và giải thích cách thức hoạt động của Selenium web scraping, chúng tôi sử dụng trang web hoopshype.

Cài đặt trình điều khiển Chrome:

Trước khi bạn bắt đầu quá trình thu thập dữ liệu web, bạn cần cài đặt trình điều khiển Chrome trên máy tính của mình. Trình điều khiển Chrome nào bạn cài đặt sẽ dựa trên phiên bản trình duyệt Chrome bạn đang sử dụng. Bạn có thể kiểm tra bằng cách làm theo các bước sau:

BƯỚC 1: Mở trình duyệt Chrome—> Nhấp vào biểu tượng “Hamburger” nằm ở góc trên bên phải của trình duyệt.

BƯỚC 2: Sau khi nhấp vào biểu tượng “Hamburger”, bạn sẽ thấy tùy chọn “Help”. Nhấp vào “Help” và chọn “about chrome browser”. Sau khi thực hiện, bạn sẽ nhận được trang phiên bản. Hình ảnh bên dưới biểu diễn trang phiên bản của Google Chrome.

Cửa sổ phiên bản Google Chrome

Lưu ý: Nếu bạn có bất kỳ bản cập nhật nào, tốt nhất bạn nên cài đặt các bản cập nhật này trước khi cài đặt trình điều khiển Chrome.

Sau khi tìm ra phiên bản, hãy truy cập trang web trình điều khiển Chrome và tải xuống trình điều khiển dựa trên phiên bản Chrome bạn có.

Cài đặt Selenium:

Cách dễ nhất để cài đặt gói selenium là thông qua PIP (Package Installer Python). Bạn có thể mở bất kỳ sổ tay nào, Juypter hoặc Google Collab, và nhập mã python sau:

pip cài đặt selenium

Lệnh trên tải xuống tất cả các gói phụ thuộc cho Selenium. Bây giờ, chúng ta hãy xem cách triển khai web scraping với Selenium.

Thu thập dữ liệu web bằng Selenium:

Chúng tôi khuyên bạn nên tạo một môi trường ảo và triển khai quy trình thu thập dữ liệu web để thực hành tốt hơn. Hãy sử dụng sổ ghi chép Juypter để thu thập dữ liệu web trong ví dụ này.

BƯỚC 1: Nhập tất cả các thư viện cần thiết. Pandas và Selenium webdriver là các thư viện chính để trích xuất dữ liệu web đơn giản. Mã python để nhập tất cả các thư viện cần thiết được hiển thị bên dưới:

từ selenium nhập webdriver từ selenium.webdriver.common.keys nhập keys nhập pandas dưới dạng pd

BƯỚC 2: Sau khi bạn nhập thư viện, bước tiếp theo là khởi tạo trình điều khiển Chrome. Mã python được hiển thị bên dưới để khởi tạo trình điều khiển

trình điều khiển = webdriver.Chrome( r"\Selenium\chromedriver.exe" )

LƯU Ý: Trong phần tranh luận, hãy đề cập đến đường dẫn đầy đủ đến vị trí trình điều khiển Chrome trên hệ thống cục bộ của bạn.

BƯỚC 3: Sau khi bạn khởi tạo trình điều khiển, trình duyệt Chrome sẽ mở trong một cửa sổ mới. Nhưng cửa sổ sẽ trống vì không có URL nguồn cấp dữ liệu. Mã python cho URL nguồn cấp dữ liệu mục tiêu được hiển thị bên dưới:

seed_url = 'https://hoopshype.com/salaries/players/' trình điều khiển. lấy (seed_url)

BƯỚC 4: Sau khi nhập URL nguồn cấp dữ liệu, trong cửa sổ mới, bạn sẽ có thể thấy trang web mục tiêu. Quy trình sau đây là tìm tên của mọi cầu thủ NBA. Trong Selenium, bạn có thể tìm các phần tử HTML bằng các phương pháp sau:

  • NHẬN DẠNG
  • Bộ chọn CSS
  • Bộ chọn XPATH
  • Tên
  • Tên lớp
  • Tên thẻ

Trong ví dụ của chúng tôi, hãy xem cách phát hiện các phần tử bằng bộ chọn XPATH. Chúng tôi muốn trích xuất hai chi tiết từ dữ liệu này:

  • Tên người chơi
  • Lương

Lưu ý: Bạn cũng có thể sử dụng biểu mẫu tìm kiếm để tìm các thành phần web. Biểu mẫu tìm kiếm nằm ở cuối trang Kiểm tra.

BƯỚC 5: Khi bạn vào trang đích, bạn sẽ thấy danh sách các cầu thủ và mức lương của họ trong các mùa giải (năm). Chọn bất kỳ tên cầu thủ nào và nhấp chuột phải vào tên đó. Bạn sẽ nhận được một số tùy chọn. Trong các tùy chọn đó, hãy nhấp vào “Kiểm tra”. Hình ảnh bên dưới biểu diễn trang Kiểm tra.

Kiểm tra trang của trang đích

Bây giờ, như đã đề cập ở trên, mục tiêu là trích xuất tên của người chơi. Vì vậy, bước đầu tiên là tìm một phần tử một người chơi và yếu tố chung giữa tất cả các phần tử người chơi. Vì vậy, trong cùng một quy trình, nhấp chuột phải vào tên người chơi và kiểm tra nó. Thao tác này sẽ đưa bạn trực tiếp đến vị trí phần tử của mình. Thay vì lấy tên của một người chơi trong kịch bản của chúng ta, chúng ta sẽ lấy tên của tất cả người chơi. Phần tử chung giữa tất cả người chơi là “td class-'name'.” Vì vậy, nếu chúng ta sử dụng phần tử này và lặp nó, chúng ta sẽ lấy được tên của tất cả người chơi. Mã python để trích xuất tên của một người chơi được hiển thị bên dưới:

nba_players = trình điều khiển .find_elements_by_xpath ( '//td[@class="name"]' ) players_list = [] cho p trong phạm vi ( len (nba_players)): players_list .append (nba_players [p] .text) in (players_list)

Giải thích: Như đã đề cập ở trên, chúng ta đang tìm phần tử mã HTML bằng cách sử dụng phương pháp XPATH. Rõ ràng là chúng ta cần đường dẫn XPATH của nhiều phần tử. Cách dễ nhất là tìm phần tử name, đó là "td class-name". Nhấp chuột phải vào phần tử và chọn "Copy". Bạn sẽ nhận được nhiều tùy chọn, chẳng hạn như sao chép đường dẫn JS và sao chép XPATH. Chọn sao chép XPATH và bạn sẽ tự động nhận được vị trí XPATH của phần tử. Dán đường dẫn vào đối số find_elements_by_XPATH. Sau khi bạn dán đường dẫn, Python sẽ bắt đầu xác định các phần tử này và lấy địa chỉ của chúng, không phải tên thực tế. Để lấy tên thực tế của người chơi, chúng ta sẽ lặp lại hàm và thêm kết quả vào danh sách trống dưới dạng đầu ra. Sau khi bạn thực thi đoạn mã trên, bạn sẽ nhận được đầu ra như trong hình bên dưới.

Đầu ra để trích xuất tên người chơi

Bây giờ chúng ta đã có tên của các cầu thủ, bước tiếp theo là lấy mức lương tương ứng của họ. Quá trình trích xuất tên chính xác được thực hiện để lấy thông tin chi tiết về mức lương.

BƯỚC 6: Dữ liệu lương được trích xuất bằng mã python như hiển thị bên dưới:

players_salary=driver .find_elements_by_xpath ( '//td[@class="hh-salaries-sorted"]' ) salary_list= [] cho s trong phạm vi ( len (players_salary)): salary_list .append (players_salary [s] .text) print (salary_list)

Giải thích: Quá trình này giống nhau. Điểm khác biệt duy nhất là phần tử chung giữa những người chơi. Phần tử web “td class-'hh-salaries-sorted'” là phần tử chung. Sau khi tìm thấy phần tử, chúng ta tạo một danh sách rỗng để lặp lại toàn bộ hàm và thêm chi tiết lương vào danh sách rỗng. Đầu ra sẽ trông giống như hình ảnh hiển thị bên dưới:

Đầu ra để trích xuất lương của người chơi

BƯỚC 7: Bây giờ, chúng ta đã thu thập dữ liệu từ mục tiêu của mình. Nhưng nếu bạn xem xét kỹ, dữ liệu chỉ dành cho một mùa (năm hiện tại). Câu lệnh vấn đề của chúng ta nói rằng hãy trích xuất dữ liệu trong thập kỷ qua. Đây là lúc tự động hóa trình duyệt xuất hiện. Không cần phải lo lắng. Chúng ta có thể sử dụng cùng một mã cho mùa như hàm vòng lặp. Mã python để tự động hóa quy trình thu thập và thu thập dữ liệu trong thập kỷ qua được hiển thị bên dưới:

với i trong phạm vi ( 2010 , 2021 ): page_number = str (i) + '-' + str (i+ 1 ) + '/' feed_url = 'https://hoopshype.com/salaries/players/' + page_number driver .get (feed_url) players = driver .find_elements_by_xpath ( '//td[@class="name"]' ) salary = driver .find_elements_by_xpath ( '//td[@class="hh-salaries-sorted"]' ) player = [] với j trong phạm vi ( len (người chơi)): player .append (người chơi [j] .text) salary = [] với k trong phạm vi ( len (lương)): salary .append (lương [k] .text)

Giải thích: Như đã đề cập ở trên, chúng ta muốn lấy dữ liệu trong mười năm qua. Để làm được điều đó, chúng ta phải triển khai phân trang. Phân trang là quá trình thêm các số liên tiếp, thường là số trang, để xác định trình tự thứ tự của trang. Các mùa được thể hiện theo định dạng YYYY/MM. Để nhận ra điều đó, chúng ta đang sử dụng kỹ thuật nối. Sau đó, chúng ta sử dụng cùng một quy trình và cùng một mã trong vòng lặp.

BƯỚC 8: Bước cuối cùng là lưu dữ liệu trong khung dữ liệu cho nhiều phân tích khác nhau, chẳng hạn như phân tích tình cảm và phân tích cạnh tranh. Mã python để lưu dữ liệu trong khung dữ liệu như được hiển thị bên dưới:

df = pd .DataFrame ( cột = [ 'Người chơi' , 'Lương' , 'Năm' ]) dữ liệu = danh sách ( zip (người chơi [1:] , lương [1:] )) df1 = pd .DataFrame (dữ liệu, cột = [ 'Người chơi' , 'Lương' ]) df1 [ 'Năm' ] = i df = df .append (df1)

LƯU Ý: Ở dòng thứ hai của mã, bạn có thể thấy tôi đã cắt lát. Lý do đằng sau điều này là khi bạn thấy đầu ra cho cả tên và mức lương của người chơi, chỉ mục đầu tiên, tức là chỉ mục 0, là “PLAYER” và “DATE”. Những mục này không mang lại nhiều tầm quan trọng cho bảng. Vì vậy, chúng ta có thể bỏ những mục đó.

Giải thích: Chúng tôi đã tạo một khung trống với các cột là “Player”, “Salary” và “Year”. Chúng tôi tích lũy tất cả dữ liệu vào một danh sách duy nhất với hàm Zip để thêm danh sách vào khung dữ liệu. Sau khi dữ liệu được thêm vào khung dữ liệu, đã đến lúc kết thúc quá trình tự động hóa và đóng trình điều khiển. Bạn có thể lưu khung dữ liệu vào tệp CSV để lưu trữ dữ liệu nếu cần.

Vậy là xong! Bạn đã thực hiện thành công việc tự động hóa và thu thập dữ liệu web bằng Selenium và Python.

Câu hỏi thường gặp:

1. Selenium có phù hợp để thu thập dữ liệu web không?
Có, nếu bạn đang có kế hoạch thu thập dữ liệu trang web động, sử dụng JavaScript. Nhưng, đây cũng là một lựa chọn tốt cho Python. Selenium là điểm khởi đầu tốt cho người mới bắt đầu quan tâm đến thu thập dữ liệu trang web.
2. Cái nào tốt hơn, BeautifulSoup hay Selenium?
Câu trả lời này dựa trên loại trang web mục tiêu và quy mô dự án của bạn. Nếu bạn muốn trích xuất một trang tĩnh nhỏ và có cấu trúc tốt, thì BeautifulSoup là lựa chọn tốt hơn. Nếu dự án của bạn liên quan đến các trang web động có cấu trúc phức tạp, thì trích xuất web selenium có thể là lựa chọn tốt nhất.
3. Công cụ nào là tốt nhất để thu thập dữ liệu web?
Python là công cụ tốt nhất và thuận lợi nhất để thực hiện web scraping. Các thư viện python, chẳng hạn như BeautifulSoup, Selenium và Request, cũng như các công cụ khác, chẳng hạn như Scrapy là những công cụ tốt nhất để web scraping.

Phần kết luận:

Bài viết này hướng dẫn cách cài đặt trình điều khiển Chrome vào hệ thống cục bộ của bạn để tự động hóa quy trình thu thập dữ liệu web nhỏ. Trong thời gian thực, việc xử lý một lượng lớn dữ liệu (về kích thước, chẳng hạn như MB, GB và đôi khi là TB) liên quan đến các bước phức tạp. Selenium là một khởi đầu tốt cho những người mới bắt đầu quan tâm đến việc thu thập dữ liệu, quy trình thu thập dữ liệu màn hình và khoa học dữ liệu nói chung. Như đã đề cập, một quy trình thu thập dữ liệu web phức tạp đòi hỏi nhiều thời gian để thu thập dữ liệu. Hầu hết các trang web không cho phép thu thập dữ liệu web trong thời gian dài; khi bạn đạt đến ngưỡng đó, trang web có thể sẽ chặn địa chỉ IP của bạn và dừng quy trình thu thập dữ liệu web của bạn. Để tránh những khó khăn như vậy, bạn nên sử dụng proxy. ProxyScrape cung cấp các proxy dân dụng tuyệt vời, phù hợp nhất cho các tác vụ có nhu cầu cao, như thu thập dữ liệu web.

TUYÊN BỐ MIỄN TRỪ TRÁCH NHIỆM: Bài viết này chỉ dành cho mục đích học tập. Nếu không tuân thủ đúng hướng dẫn, việc thực hiện web scraping có thể là bất hợp pháp. Bài viết này không hỗ trợ web scraping bất hợp pháp dưới bất kỳ hình thức nào.