Hướng dẫn dành cho người mới bắt đầu học về Web Scraping và trực quan hóa dữ liệu bằng Python

Hướng dẫn , Python , Thu thập dữ liệu ,19-12-20215 phút đọc

Làm thế nào bạn có thể lấy thông tin quan trọng từ các trang web một cách nhanh chóng và hiệu quả? Phải mất rất nhiều thời gian để trích xuất dữ liệu theo cách thủ công. Bạn có thể sử dụng web scraping, một phương pháp tự động để thu thập dữ liệu không phải dạng bảng hoặc có cấu trúc kém từ các trang web. Sau đó, bạn có thể chuyển đổi dữ liệu đó thành định dạng có cấu trúc và có thể sử dụng được như bảng tính

Mục lục

Làm thế nào bạn có thể lấy thông tin quan trọng từ các trang web một cách nhanh chóng và hiệu quả? Phải mất rất nhiều thời gian để trích xuất dữ liệu theo cách thủ công. Bạn có thể sử dụng web scraping, một phương pháp tự động để lấy dữ liệu không phải dạng bảng hoặc có cấu trúc kém từ các trang web. Sau đó, bạn có thể chuyển đổi dữ liệu đó thành định dạng có cấu trúc và có thể sử dụng được như bảng tính hoặc tệp .csv.

Web scraping cho phép bạn lưu trữ dữ liệu và theo dõi các thay đổi dữ liệu trực tuyến. Các doanh nghiệp sử dụng rộng rãi cho các mục đích khác nhau. Ví dụ, các cửa hàng trực tuyến sử dụng nó để thu thập các mặt hàng giá của đối thủ cạnh tranh và các trang công khai. Sau đó, họ sử dụng thông tin này để điều chỉnh giá của họ. Một hoạt động phổ biến khác của web scraping là contact scraping, trong đó các tổ chức thu thập dữ liệu cá nhân như số điện thoại hoặc địa chỉ email cho mục đích tiếp thị. 

Tại sao lại sử dụng Web Scraping?

Tại sao một người nào đó phải trích xuất một lượng lớn thông tin từ các trang web? Để hiểu điều này, hãy xem các ứng dụng sau của web scraping.

  • Nghiên cứu và Phát triển – Bạn có thể thu thập các tập dữ liệu lớn (Nhiệt độ, Thông tin chung, v.v.) từ các trang web và phân tích chúng để tiến hành khảo sát cho mục đích nghiên cứu và phát triển.
  • So sánh giá – Các doanh nghiệp và dịch vụ như ParseHub sử dụng công cụ thu thập dữ liệu web để thu thập dữ liệu từ các trang web mua sắm trực tuyến và so sánh giá sản phẩm.
  • Danh sách việc làm – Bạn có thể sử dụng công cụ thu thập dữ liệu web để thu thập thông tin chi tiết về việc làm và phỏng vấn từ nhiều trang web khác nhau và liệt kê chúng tại một nơi. 
  • Thu thập dữ liệu từ mạng xã hội – Bạn có thể sử dụng công cụ thu thập dữ liệu web để thu thập dữ liệu từ các trang web mạng xã hội như Instagram, Twitter và tìm hiểu xu hướng hiện tại.
  • Thu thập địa chỉ email – Nhiều công ty sử dụng email làm phương tiện tiếp thị. Họ sử dụng web scraping để thu thập ID email và sau đó gửi email hàng loạt.

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

Bạn có thể thu thập dữ liệu từ các trang web bằng cách làm theo các bước dưới đây.

  • Lấy URL mà bạn muốn thu thập
  • Kiểm tra trang
  • Tìm dữ liệu bạn phải trích xuất
  • Viết mã
  • Chạy mã và trích xuất dữ liệu
  • Lưu trữ dữ liệu theo định dạng mong muốn

Các thư viện mà chúng ta có thể sử dụng để thu thập dữ liệu web trong Python là:

Pandas – Pandas được sử dụng để thao tác và phân tích dữ liệu. Bạn có thể sử dụng thư viện này để trích xuất dữ liệu và lưu trữ theo định dạng yêu cầu.

Beautiful Soup – Đây là một gói Python để phân tích cú pháp các tài liệu HTML và XML. Nó tạo ra các cây phân tích cú pháp hữu ích trong việc trích xuất dữ liệu dễ dàng từ các trang web.

Yêu cầu – Đây là một thư viện HTTP đơn giản.

Chúng tôi sẽ sử dụng trang web này để trích xuất số ca mắc COVID. Sau đó, chúng tôi sẽ phân tích dữ liệu và tạo một số hình ảnh trực quan.

Nhập thư viện

Bạn có thể nhập yêu cầu và BeautifulSoup bằng Python để thu thập dữ liệu web, như được hiển thị bên dưới.

yêu cầu nhập khẩu từ bs4 nhập khẩu BeautifulSoup

URL để thu thập dữ liệu

Chỉ định URL trang web mà bạn phải lấy dữ liệu. Bạn phải sử dụng phương thức requests.get() để gửi yêu cầu GET đến URL đã chỉ định. Ngoài ra, bạn phải tạo một hàm tạo BeautifulSoup sẽ lấy hai đối số chuỗi như được hiển thị trong mã bên dưới.

url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/' trang = requests.get(url) soup = BeautifulSoup(page.text, 'html.parser' ) dữ liệu = []

Cạo mọi phần tử

Bạn có thể thu thập mọi phần tử trong bảng URL bằng cách sử dụng phương thức soup.find_all(). Phương thức này trả về một đối tượng cung cấp quyền truy cập dựa trên chỉ mục vào các lần xuất hiện được tìm thấy và có thể được in bằng vòng lặp for hoặc while.

data_iterator = iter(soup.find_all( 'td' ))

Sử dụng vòng lặp

Bạn có thể sử dụng vòng lặp while True lặp lại cho đến khi có dữ liệu trong trình lặp.

while True : thử : quốc gia = tiếp theo (data_iterator). văn bản đã xác nhận = tiếp theo (data_iterator). văn bản số người chết = tiếp theo (data_iterator). văn bản lục địa = tiếp theo (data_iterator). văn bản

Đối với các cột “đã xác nhận” và “số người chết”, hãy đảm bảo xóa dấu phẩy và chuyển đổi thành int. 

data.append(( quốc gia, (xác nhận. thay thế ( ', ' , '' )), (tử vong. thay thế ( ',' , '' )), lục địa )) ngoại trừ StopIteration: ngắt

Khi số phần tử còn lại để lặp lại là 0, lỗi StopIteration sẽ xuất hiện.

Tạo một khung dữ liệu Pandas

Bạn có thể trích xuất dữ liệu từ trang web sau khi chạy mã trên. Bạn phải tạo một khung dữ liệu Pandas để phân tích dữ liệu sâu hơn. Trong mã bên dưới, chúng tôi đã sắp xếp dữ liệu theo số ca COVID được xác nhận.

Nhập thư viện pandas để tạo khung dữ liệu.

dữ liệu .sort (key = lambda hàng: hàng [1] , reverse = True) import pandas as pd df = pd .DataFrame (dữ liệu, cột = [ 'quốc gia' , 'Số trường hợp' , 'Tử vong' , 'Lục địa' ],dtype=float) df .head () df [ 'Số trường hợp' ] = [x.replace( ',' , '' ) for x in df[ 'Số trường hợp' ] ] df [ 'Số trường hợp' ] = pd .to_numeric (df [ 'Số trường hợp' ] ) df

Bạn sẽ nhận được kết quả đầu ra như sau:

Để lấy thông tin về Dataframe, hãy sử dụng df.info().

df. thông tin ()

Tạo Cột Death_rate

Chúng ta sẽ tạo một cột mới có tên là Death_rate như hiển thị bên dưới.

dff = df .sort_values (by = 'Số trường hợp' , tăng dần = False) dff [ 'Tỷ lệ tử vong' ] = (dff [ 'Số ca tử vong' ] /dff [ 'Số trường hợp' ] )* 100 dff .head ()

Đầu ra như sau.

Quét Web Với Proxy

Máy chủ proxy cho phép bạn sử dụng một địa chỉ IP duy nhất để truy cập thông tin bạn muốn thu thập. Theo cách này, trang web không nhìn thấy địa chỉ IP thực của bạn, cho phép bạn thu thập dữ liệu ẩn danh. Bạn phải sử dụng proxy để thu thập dữ liệu web vì những lý do sau.

  • Bạn có thể gửi nhiều yêu cầu đồng thời đến một máy chủ web mà không bị cấm bằng cách sử dụng một nhóm proxy.
  • Với sự trợ giúp của proxy, bạn có thể thực hiện yêu cầu từ một vị trí, thiết bị, ISP, mạng di động cụ thể. Bạn cũng có thể thu thập nội dung được hiển thị cho một khu vực hoặc thiết bị cụ thể.
  • Một số trang web có lệnh cấm IP và bạn có thể vượt qua lệnh cấm này bằng cách sử dụng proxy. 

Các loại Proxy cho Web Scraping

Bạn có thể sử dụng hai proxy bên dưới để thu thập dữ liệu từ các trang web.

  • Proxy trung tâm dữ liệu – Địa chỉ IP trung tâm dữ liệu là địa chỉ IP của máy chủ. Các máy chủ được đặt tại các trung tâm dữ liệu. Mục đích chính của proxy trung tâm dữ liệu là ẩn địa chỉ của bạn khỏi các trang web bạn thu thập dữ liệu. Các proxy này chủ yếu được sử dụng để thu thập dữ liệu kinh doanh.
  • Proxy dân dụng – Địa chỉ IP dân dụng đắt hơn IP trung tâm dữ liệu và khó có được. Các proxy này cho phép bạn chọn một vị trí cụ thể, tức là thành phố, quốc gia, v.v. và lướt web như một người dùng thực sự trong khu vực địa lý đó.

Trực quan hóa dữ liệu với Python

Bạn biết rằng trực quan hóa dữ liệu là biểu diễn đồ họa của dữ liệu hoặc thông tin. Bạn có thể sử dụng các công cụ trực quan như biểu đồ, bản đồ và đồ thị như một cách dễ hiểu để hiểu dữ liệu được biểu diễn. Hãy cùng xem cách chúng ta có thể trực quan hóa dữ liệu được trích xuất từ trang web này bằng các công cụ trực quan hóa dữ liệu.

Nhập thư viện

Bạn phải nhập các thư viện sau để trực quan hóa dữ liệu như hiển thị bên dưới.

nhập seaborn dưới dạng sns nhập matplotlib.pyplot dưới dạng plt từ pylab nhập rcParams

Vẽ đồ thị cặp

Bạn có thể vẽ biểu đồ cặp để chứng minh mối quan hệ từng cặp trong một tập dữ liệu. Bạn có thể dễ dàng triển khai bằng cách sử dụng mã bên dưới và có thể xác định xu hướng trong dữ liệu để phân tích theo dõi.

rcParams[ 'figure.figsize' ] = 15, 10 từ matplotlib.pyplot nhập figure figure( num = Không có, figsize=(20, 6), dpi = 80, facecolor = 'w' , edgecolor = 'k' ) sns.pairplot(dff, hue = 'Continent' )

Bạn sẽ nhận được kết quả như sau.

Vẽ đồ thị thanh

Bạn có thể vẽ biểu đồ thanh hiển thị dữ liệu theo danh mục dưới dạng các thanh hình chữ nhật và so sánh các giá trị của các danh mục khác nhau trong dữ liệu. 

sns .barplot (x = 'quốc gia' , y = 'Số trường hợp' , dữ liệu = dff .head ( 10 ))

Đầu ra như sau.

Vẽ biểu đồ phân tán

Bạn có thể hiểu mối quan hệ giữa các giá trị số bằng cách sử dụng biểu đồ phân tán. Nó sử dụng các dấu chấm để biểu diễn mối quan hệ giữa các biến. 

sns .scatterplot(x = "Số ca bệnh" , y = "Tử vong" , màu sắc = "Lục địa" , dữ liệu = dff)

Đầu ra như sau.

Nhóm và sắp xếp dữ liệu

Trong đoạn mã bên dưới, chúng tôi sẽ nhóm dữ liệu theo Châu lục và sắp xếp theo số ca mắc COVID.

dfg = dff.groupby(by = 'Continent',as_index = False).agg({'Number of cases':sum,'Deaths':sum})
dfgg = dfg[1:]
df1 = dfgg.sort_values(by = 'Number of cases',ascending = False)
df1['Death_rate'] = (df1['Deaths']/df1['Number of cases'])*100
df1.sort_values(by = 'Death_rate',ascending = False)

Đầu ra như sau.

Bây giờ, chúng ta sẽ vẽ biểu đồ thanh giữa “Continent” và “Death_rate” như hiển thị bên dưới.

sns.barplot(x = 'Lục địa' , y = 'Tỷ lệ tử vong' , dữ liệu = df1.sort_values( theo = 'Tỷ lệ tử vong' , tăng dần = Sai ))

Đầu ra như sau.

Biểu đồ thanh này cho thấy tỷ lệ tử vong cao nhất ở Nam Mỹ và thấp nhất ở Úc trong số tất cả các quốc gia. 

Nhập texttable

Cài đặt texttable để tạo bảng ASCII đơn giản. Sau đó, nhập nó dưới dạng tt.

!pip cài đặt texttable nhập texttable như tt

Tạo một đối tượng texttable

Bạn phải tạo một đối tượng texttable như hình dưới đây. Bạn phải thêm một hàng trống vào đầu bảng cho các tiêu đề và căn chỉnh các cột.

table = tt.Texttable() table .add_rows([( None , None , None , None )] + data) table .set_cols_align(( 'c' , 'c' , 'c' , 'c' )) # 'l' biểu thị bên trái, 'c' biểu thị ở giữa  'r' biểu thị bên phải table .header (( 'Quốc gia' , 'Số ca bệnh' , 'Tử vong' , 'Châu lục' )) print( table .draw())

Ở đây, đầu ra biểu diễn một số hàng của bảng dưới dạng.

Phần kết luận

Với web scraping, bạn có thể trích xuất một lượng lớn dữ liệu từ các trang web một cách nhanh chóng và hiệu quả. Bạn có thể chuyển đổi dữ liệu phi cấu trúc đã trích xuất thành định dạng có thể sử dụng như tệp .csv. Chúng tôi thấy rằng chúng tôi có thể trích xuất dữ liệu từ web bằng cách sử dụng hai mô-đun, tức là PandasBeautifulSoup . Proxy cho phép bạn trích xuất dữ liệu từ web một cách ẩn danh. Bạn có thể sử dụng proxy trung tâm dữ liệu hoặc proxy dân dụng để trích xuất web. Proxy dân dụng đáng tin cậy hơn nhưng đắt hơn proxy trung tâm dữ liệu. Hơn nữa, chúng ta có thể thực hiện phân tích dữ liệu để có được thông tin sâu sắc dựa trên nhu cầu của mình. Trong bài viết này, chúng tôi đã phân tích dữ liệu bằng cách sử dụng các công cụ trực quan hóa dữ liệu như biểu đồ thanh, biểu đồ cặp và biểu đồ phân tán.