Hướng dẫn cho người mới bắt đầu để học cách quét web và trực quan hóa dữ liệu với Python

Hướng dẫn, Python, Cạo, Mar-06-20245 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 để 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

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 để 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 Web Scraping được sử dụng?

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.

  • Nghiên cứu và Phát triển - Bạn có thể thu thập các bộ 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 để thực hiện các cuộc khảo sát cho 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 tính năng quét 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 công việc - Bạn có thể sử dụng web scraping để thu thập chi tiết về cơ hội việc làm và phỏng vấn từ các trang web khác nhau và liệt kê chúng ở một nơi. 
  • Social Media Scraping - Bạn có thể sử dụng quét web để thu thập dữ liệu từ các trang web truyền thông xã hội như Instagram, Twitter và tìm hiểu xu hướng.
  • Thu thập địa chỉ email - Nhiều công ty sử dụng email như một phương tiện để tiếp thị. Họ sử dụng quét web để thu thập ID email và sau đó gửi email hàng loạt.

Quét 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 cạo
  • 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 ở định dạng mong muốn

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.

Nhập thư viện

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

URL để cạo dữ liệu

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 = []

Cạo mọi yếu tố

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'))

Sử dụng vòng lặp

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.

Tạo khung dữ liệu Pandas

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()

Tạo cột Death_rate

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à.

Quét web bằng 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 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ể gửi nhiều yêu cầu đồng thời đến một máy chủ web mà không bị cấm 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 dữ liệu nội dung 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ể phá vỡ chúng với sự trợ giúp của proxy. 

Các loại proxy để quét web

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

  • Proxy trung tâm dữ liệu - Địa chỉ IP của 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 cư – Địa chỉ IP khu dân cư đắ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 với tư cách là người dùng thực 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ễ 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.

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ư 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

Vẽ một cốt truyện cặp

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ư.

Vẽ một âm mưu quán bar

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à.

Vẽ một âm mư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 = "Số ca tử vong",huế = "Lục địa",dữ liệu = dff)

Đầu ra là.

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 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. 

Nhập bảng văn bản

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

Tạo đối tượng bảng văn bản

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  '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à.

Kết thúc

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à PandasBeautifulSoup. 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.