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

Hướng dẫn, proxy, python, cạo, Mar-06-20245 phút đọc

Thu thập dữ liệu là một thuật ngữ đã được sử dụng nhiều trong thập kỷ qua. Mọi công ty đều muốn biết khách hàng của họ đầy đủ để tổ chức có thể phát triển chiến lược tốt nhất để giải quyết 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 cho

Thu thập dữ liệu là một thuật ngữ đã được sử dụng nhiều trong thập kỷ qua. Mọi công ty đều muốn biết khách hàng của họ đầy đủ để tổ chức có thể phát triển chiến lược tốt nhất để giải quyết 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. Tuy nhiên, đô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. Web scraping là cách tiếp cận để trích xuất dữ liệu từ một nguồn được nhắm mục tiêu và lưu nó 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 quét web. Có rất 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 khác trực tuyến. Những cái nổi tiếng nhất là BeautifulSoup và Selenium. Trong bài viết này, chúng ta sẽ xem làm thế nào để thực hiện selenium web scraping.

Web Scraping là gì?

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

Selen – Nó là gì?

Selenium là một thư viện python mã nguồn mở và miễn phí, là một khung kiểm tra tự động chủ yếu được sử dụng để kiểm tra và xác thực các ứng dụng web trên các 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, 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 Selen (IDE).
  • Điều khiển từ xa Selenium.
  • Trình điều khiển web.
  • Lưới Selen.

Hãy xem cách sử dụng Selenium với Python để tự động hóa toàn bộ quá trình quét web.

Tuyên bố vấn đề:

Chúng tôi mong 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 quét web, cần phải cài đặt trình điều khiển Chrome trên máy tính của bạn. Trình điều khiển Chrome bạn cài đặt 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 nó 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", hiện diện ở góc trên cùng 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 "Trợ giúp". Nhấp vào "Trợ giúp" và chọn "giới thiệu về trình duyệt chrome". Khi bạn làm điều đó, bạn sẽ nhận được trang phiên bản. Hình ảnh dưới đây đại diện cho trang phiên bản cho 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.

Khi bạn 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ổ ghi chép nào, Juypter hoặc Google Collab và nhập mã python sau:

pip cài đặt selen

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

Web Scraping với Selenium:

Chúng tôi khuyên bạn nên tạo một môi trường ảo và thực hiện quy trình quét web để thực hành tốt hơn. Hãy sử dụng sổ ghi chép Juypter để quét 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à trình điều khiển web Selenium là các thư viện chính để quét 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ừ webdriver nhập khẩu selen
từ selenium.webdriver.common.keys nhập khóa
Nhập khẩu gấu trúc dưới dạng PD

BƯỚC 2: Khi bạn nhập các 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 đối số, hãy đề cập đến đường dẫn đầy đủ của vị trí trình điều khiển Chrome trên hệ thống cục bộ của bạn.

Bước 3: 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ổ phải 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 đích được hiển thị bên dưới:

seed_url = 'https://hoopshype.com/salaries/players/'
người lái. nhận (seed_url)

BƯỚC 4: Khi URL nguồn cấp dữ liệu được nhập, trong cửa sổ mới, bạn sẽ có thể thấy trang web mục tiêu. Quá 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 thấy các phần tử HTML bằng các phương pháp sau:

  • ID
  • 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 cách sử dụ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 ý: Cũng có thể sử dụng biểu mẫu tìm kiếm để tìm các phần tử web. Biểu mẫu tìm kiếm nằm ở cuối trang Kiểm tra.

BƯỚC 5: Khi bạn truy cập vào trang mục tiêu, bạn sẽ thấy danh sách các cầu thủ và mức lương của họ cho các mùa (năm). Chọn bất kỳ tên người chơi 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 đó, nhấp vào "Kiểm tra". Hình ảnh dưới đây đại diện cho trang Kiểm tra.

Kiểm tra trang của SIte mục tiêu

Bây giờ, như đã đề cập ở trên, mục đích 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 yếu tố chơi đơn và yếu tố chung giữa tất cả các yếu tố người chơi. Vì vậy, trong cùng một quá 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 bạn. Thay vì lấy tên của một người chơi trong kịch bản của chúng tôi, chúng tôi đang lấy tất cả tên của người chơi. Yếu tố chung giữa tất cả những 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 lại nó, chúng ta sẽ nhận được tên của tất cả người chơi. Mã python để trích xuất tên của người chơi được hiển thị bên dưới:

nba_players = driver.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, 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 "Sao chép". 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 copy XPATH và bạn sẽ tự động lấy vị trí XPATH của phần tử. Dán đường dẫn vào đối số find_elements_by_XPATH. 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. Để lấy tên thật của người chơi, chúng tôi sẽ lặp lại chức năng và thêm kết quả vào một danh sách trống dưới dạng đầu ra. Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được đầu ra như thể hiện trong hình bên dưới.

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

Bây giờ chúng tôi đã có tên của các cầu thủ, bước tiếp theo là nhận 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 để có được chi tiết tiền lương.

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

players_salary=driver.find_elements_by_xpath('//td[@class="hh-lương-sắp xếp"]')
salary_list=[]
for s in range(len(players_salary)):
    salary_list.append(players_salary[s].text)
in(salary_list)

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

Đầu ra để trích lương cầu thủ

BƯỚC 7: Bây giờ, chúng tôi đã thu thập dữ liệu từ mục tiêu của chúng tôi. Nhưng, nếu bạn nhìn kỹ, dữ liệu chỉ dành cho một mùa (năm hiện tại). Tuyên bố vấn đề của chúng tôi nói để trích xuất dữ liệu trong thập kỷ qua. Đây là nơi tự động hóa trình duyệt đi vào hình ảnh. 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 quá trình cạo và mua dữ liệu trong thập kỷ qua được hiển thị dưới đây:

Đố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)
    
người chơi = driver.find_elements_by_xpath('//td[@class="name"]')
    lương = tài xế.find_elements_by_xpath('//td[@class="hh-lương-sắp xếp"]') 
    
player = []for j in range(len(players)):
        player.append(người chơi[j].text)
    
lương = []cho k trong phạm vi (len (tiền lương)):
        salary.append(tiền lương[k].text)

Giải thích: Như đã đề cập ở trên, chúng tôi mong muốn có được dữ liệu trong mười năm qua. Để làm được điều đó, chúng ta phải thực hiện 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 ở định dạng YYYY / MM. Để nhận ra điều đó, chúng tôi đang sử dụng kỹ thuật nối. Sau đó, chúng tôi 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 các 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ư hình dưới đây:

DF = PD. DataFrame(columns=['Người chơi','Mức lương','Năm'])
Dữ liệu = Danh sách (Zip(Người chơi[1:],Mức lương[1:])) 
df1 = PD. DataFrame(data, columns=['Player','Salary']) 
df1['Năm'] = i
df = df.append(df1)

LƯU Ý: Trong dòng thứ hai của mã, bạn có thể thấy rằng tôi đã cắt. Lý do đằng sau điều này là khi bạn thấy đầu ra cho cả tên và tiền lương của người chơi, chỉ số đầu tiên, tức là chỉ số 0, là "PLAYER" và "DATE". Những mặt hàng này không mang lại nhiều tầm quan trọng cho bàn. 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 "Người chơi", "Mức lương" và "Năm" làm cột. 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 chức năng Zip để nối danh sách vào khung dữ liệu. Khi dữ liệu được thêm vào khung dữ liệu, đã đến lúc kết thúc 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.

Đó là nó! Bạn đã thực hiện thành công tự động hóa và quét web bằng Selenium và Python.

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

1. Selenium có phù hợp để cạo web không?
Có, nếu bạn đang có kế hoạch quét các trang web động, sử dụng JavaScript. Tuy nhiên, nó cũng là một lựa chọn tốt cho Python. Selenium là một điểm khởi đầu tốt cho những người mới bắt đầu quan tâm đến việc quét 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 đang tìm cách cạo một trang tĩnh nhỏ và có cấu trúc tốt, thì BeautifulSoup 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, selenium web scraping có thể là lựa chọn tốt nhất.
3. Các công cụ tốt nhất để quét web là gì?
Python là công cụ tốt nhất và thuận lợi nhất để thực hiện quét web. 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 để quét web.

Kết thúc:

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 quét 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) bao gồm 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, quá trình quét màn hình và khoa học dữ liệu nói chung. Như đã đề cập, một quá trình quét web phức tạp đòi hỏi rất nhiều thời gian để thu thập dữ liệu. Hầu hết các trang web không cho phép quét web trong một 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 quá trình quét web của bạn. Để tránh những khó khăn như vậy, nên sử dụng proxy. ProxyScrape Cung cấp proxy dân cư tuyệt vời phù hợp nhất cho các tác vụ có nhu cầu cao, như quét web.

DISCLAIMER: Bài viết này chỉ dành cho mục đích học tập. Nếu không tuân theo các hướng dẫn thích hợp, thực hiện quét web có thể là bất hợp pháp. Bài viết này không hỗ trợ quét web bất hợp pháp dưới bất kỳ hình thức hoặc hình thức nào.