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 để có được dữ liệu không 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, chẳng hạn 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 để có được dữ liệu không 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 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 nó 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ó để loại bỏ các mặt hàng giá của đối thủ cạnh tranh và các trang có sẵn công khai. Sau đó, họ sử dụng thông tin này để điều chỉnh giá của họ. Một thực tế 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 ai đó 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 đây 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 để quét web bằng 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ữ nó ở định dạng yêu cầu.
Súp đẹp - Nó 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 - Nó 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ố trường hợp COVID. Sau đó, chúng tôi sẽ phân tích dữ liệu và tạo ra một số hình ảnh trực quan.
Bạn có thể nhập các yêu cầu và BeautifulSoup bằng Python để quét web, như hình dưới đây.
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 cạo 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 được chỉ định. Hơn nữa, bạn phải tạo một hàm tạo BeautifulSoup sẽ lấy hai đối số chuỗi như thể hiện trong đoạn mã bên dưới.
url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
page = requests.get(url)
súp = BeautifulSoup (page.text, 'html.parser')
dữ liệu = []
Bạn có thể cạo mọi phần tử trong bảng URL của URL bằng cách sử dụng phương thức soup.find_all(). Nó 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 cách sử dụng vòng lặp for hoặc while.
data_iterator = iter(soup.find_all('td'))
Bạn có thể sử dụng một vòng lặp True trong khi tiếp tục lặp lại cho đến khi có dữ liệu có sẵn trong bộ lặp.
trong khi True:
Hãy thử:
Quốc gia = Tiếp theo (data_iterator). Nhắn tin
xác nhận = tiếp theo (data_iterator). Nhắn tin
tử vong = tiếp theo (data_iterator). Nhắn tin
lục địa = tiếp theo (data_iterator). Nhắn tin
Đối với các cột "đã xác nhận" và "tử vong", 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:
phá vỡ
Khi số lượng phần tử còn lại để lặp qua bằng không, lỗi StopIteration sẽ được nâng lên.
Bạn có thể trích xuất dữ liệu từ trang web sau khi chạy đoạn mã trên. Bạn phải tạo một khung dữ liệu Pandas để phân tích dữ liệu hơn nữa. Trong mã bên dưới, chúng tôi đã sắp xếp dữ liệu theo số trường hợp COVID được xác nhận.
Nhập thư viện gấu trúc để tạo khung dữ liệu.
data.sort(key = lambda row: row[1], reverse = True)
Nhập khẩu gấu trúc dưới dạng PD
DF = PD. DataFrame(data,columns=['country','Number of cases','Deaths','Continent'],dtype=float)
df.head()
df['Số ca bệnh'] = [x.replace(',', '') cho x tính bằng df['Số ca bệnh']]
df['Số ca bệnh'] = pd.to_numeric(df['Số ca bệnh'])
Df
Bạn sẽ nhận được kết quả dưới đây:
Để 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 Death_rate như hình dưới đây.
dff = df.sort_values(by ='Số trường hợp',tăng dần = False)
dff['Death_rate'] = (dff['Tử vong']/dff['Số ca bệnh'])*100
dff.head()
Đầu ra là.
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 cạo. Bằng cách này, trang web không thấy địa chỉ IP thực của bạn cho phép bạn cạo dữ liệu ẩn danh. Bạn phải sử dụng proxy để quét web vì những lý do sau.
Bạn có thể sử dụng hai proxy dưới đây để 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ễ tiếp cận để hiểu dữ liệu được thể hiện. Hãy 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ư hình dưới đây.
Nhập khẩu 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ẽ một biểu đồ cặp để chứng minh mối quan hệ theo cặp trong một tập dữ liệu. Bạn có thể dễ dàng thực hiện nó 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 tiếp theo.
rcParams['figure.figsize'] = 15, 10
từ matplotlib.pyplot nhập khẩu số liệu
figure(num=None, figsize=(20, 6), dpi=80, facecolor='w', edgecolor='k')
sns.pairplot(dff,hue='Lục địa')
Bạn sẽ nhận được đầu ra như.
Bạn có thể vẽ biểu đồ thanh hiển thị dữ liệu phân loại dưới dạng 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 = 'country',y = 'Số trường hợp',data = dff.head(10))
Đầu ra là.
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 = "Số ca tử vong",huế = "Lục địa",dữ liệu = dff)
Đầu ra là.
Trong đoạn mã bên dưới, chúng tôi sẽ nhóm dữ liệu theo Lục địa và sắp xếp theo số trường hợp 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 là.
Bây giờ, chúng ta sẽ vẽ một biểu đồ thanh giữa "Continent" và "Death_rate" như hình dưới đây.
sns.barplot(x = 'Lục địa',y = 'Death_rate',data = df1.sort_values(by = 'Death_rate',tăng dần = False))
Đầu ra là.
Biểu đồ thanh này cho thấy tỷ lệ tử vong là 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 dưới dạng 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 ở đầu bảng cho các tiêu đề và căn chỉnh các cột.
Bảng = TT. Bảng văn bản()
table.add_rows([(None, None, None, None)] + data) table.set_cols_align(('c', 'c', 'c', 'c')) # 'l' biểu thị trái, 'c' biểu thị trung tâm và 'r' biểu thị bên phải
bàn. header((' Quốc gia ', ' Số ca mắc ', ' Số ca tử vong ', ' Lục địa '))
print(table.draw())
Ở đây, đầu ra đại diện cho một số hàng của bảng là.
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 chúng tôi có thể cạo 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 ẩn danh. Bạn có thể sử dụng trung tâm dữ liệu hoặc proxy dân cư để quét web. Các 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 để thu được thông tin sâu sắc dựa trên nhu cầu của chúng ta. 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.