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
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 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.
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.
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.
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
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 = []
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' ))
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.
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 ()
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.
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ể sử dụng hai proxy bên dưới để thu thập dữ liệu từ các trang web.
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.
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
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.
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.
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.
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.
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
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 và '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.
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à Pandas và BeautifulSoup . 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.