Quét web, biểu thức chính quy và trực quan hóa dữ liệu, thực hiện tất cả trong Python

trăn, cạo, Nov-15-20225 phút đọc

Web scraping có thể được định nghĩa là phương pháp thu thập và tái cấu trúc dữ liệu từ các trang web. Nó cũng có thể được định nghĩa là cách tiếp cận có lập trình để lấy dữ liệu trang web một cách tự động. Ví dụ: bạn muốn trích xuất ID email của tất cả những người đã nhận xét về bài đăng trên Facebook. Bạn có thể làm điều này bằng cách

Mục lục

Web scraping có thể được định nghĩa là phương pháp thu thập và tái cấu trúc dữ liệu từ các trang web. Nó cũng có thể được định nghĩa là cách tiếp cận có lập trình để lấy dữ liệu trang web một cách tự động. Ví dụ: bạn muốn trích xuất ID email của tất cả những người đã nhận xét về bài đăng trên Facebook. Bạn có thể làm điều này bằng hai phương pháp. Trước tiên, bạn có thể trỏ con trỏ đến chuỗi địa chỉ email của bất kỳ người nào. Sau đó, bạn có thể sao chép và dán nó vào một tệp. Phương pháp này được gọi là cạo thủ công. Nhưng nếu bạn muốn thu thập 2000 ID email thì sao? Với sự trợ giúp của công cụ quét web, bạn có thể trích xuất tất cả các ID email trong 30 giây thay vì 3 giờ nếu bạn sử dụng quét thủ công.

Bạn có thể sử dụng các công cụ quét web để trích xuất thông tin từ các trang web. Bạn chỉ cần biết cách nhấp chuột và không yêu cầu kiến thức lập trình. Những công cụ này tiết kiệm tài nguyên và tiết kiệm thời gian và chi phí. Bạn có thể cạo hàng triệu trang dựa trên nhu cầu của mình mà không phải lo lắng về băng thông mạng. Một số trang web triển khai chống bot không khuyến khích người quét thu thập dữ liệu. Nhưng các công cụ quét web tốt có các tính năng tích hợp sẵn để vượt qua các công cụ này và mang lại trải nghiệm cạo liền mạch.

Web Scraping trong Python

Python có các công cụ tuyệt vời để thu thập dữ liệu từ web. Ví dụ: bạn có thể nhập thư viện yêu cầu để truy xuất nội dung từ trang web và bs4 (BeautifulSoup) để trích xuất thông tin liên quan. Bạn có thể làm theo các bước dưới đây để quét web bằng Python. Chúng tôi sẽ trích xuất thông tin từ trang web này

Yêu cầu nhập:

Bạn phải nhập thư viện yêu cầu để tìm nạp HTML của trang web. 

Yêu cầu nhập khẩu

Yêu cầu GET:

Bạn phải thực hiện yêu cầu GET đến trang web. Bạn có thể làm điều này bằng cách dán URL vào hàm requests.get().

r = requests.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

Trích xuất nội dung:

Trích xuất nội dung của trang web bằng r.content. Nó cung cấp nội dung của trang web tính bằng byte. 

c = r.nội dung

Nhập khẩu BeautifulSoup:

Bạn phải nhập thư viện BeautifulSoup vì nó giúp dễ dàng thu thập thông tin từ các trang web.

từ bs4 nhập khẩu BeautifulSoup

Tạo một đối tượng súp:

Bạn phải tạo một đối tượng BeautifulSoup từ nội dung và phân tích cú pháp nó bằng một số phương thức.

súp = BeautifulSoup(c)
print(soup.get_text())

Bạn sẽ nhận được đầu ra (nó chỉ là một phần) phần nào như thế này.

Trích xuất dữ liệu hữu ích:

Chúng ta phải tìm đúng bộ chọn CSS vì chúng ta cần trích xuất dữ liệu mong muốn của mình. Chúng ta có thể tìm thấy nội dung chính trên trang web bằng phương thức .find() của đối tượng soup.

main_content = soup.find('div', attrs = {'class': 'entry-content'})

Sử dụng thuộc tính .text:

Chúng ta có thể truy xuất thông tin dưới dạng văn bản từ bảng bằng cách sử dụng thuộc tính .text của súp.

nội dung = main_content. find('ul').text
in (nội dung)

Chúng tôi truy xuất văn bản của bảng dưới dạng một chuỗi. Nhưng thông tin sẽ được sử dụng rất nhiều nếu chúng ta trích xuất các phần cụ thể của chuỗi văn bản. Để đạt được nhiệm vụ này, chúng ta cần chuyển sang Biểu thức chính quy.

Biểu thức chính quy trong Python

Biểu thức chính quy (RegEx) là một chuỗi các mẫu xác định mẫu tìm kiếm. Ý tưởng cơ bản là:

  • Xác định mẫu mà bạn muốn khớp trong một chuỗi văn bản. 
  • Tìm kiếm trong chuỗi cho các trận đấu trở lại.

Giả sử chúng ta muốn trích xuất các mẩu thông tin sau từ bảng văn bản.

  • Tiền lương
  • Tên của các trường cao đẳng
  • Tên của các tổng thống

Bạn có thể trích xuất ba mẩu thông tin bằng cách làm theo các bước được đề cập bên dưới.

Bước 01:

Nhập khẩu lại và để trích xuất tiền lương, bạn phải thực hiện một mô hình tiền lương. Sử dụng phương thức re.compile() để biên dịch một mẫu biểu thức chính quy được cung cấp dưới dạng chuỗi thành một đối tượng mẫu RegEx. Hơn nữa, bạn có thể sử dụng pattern.findall() để tìm tất cả các kết quả phù hợp và trả về chúng dưới dạng danh sách các chuỗi. Mỗi chuỗi sẽ đại diện cho một trận đấu.

Nhập khẩu lại
salary_pattern = lại. biên dịch (r'\$.+')
Lương = salary_pattern.findall(content)

Bước 02:

Lặp lại quy trình tương tự để trích xuất tên của các trường cao đẳng. Tạo một mẫu và trích xuất tên. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

Bước 03:

Lặp lại quy trình tương tự để trích xuất tên của các tổng thống. Tạo một mẫu và trích xuất các tên cần thiết. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

Bước 04:

Mức lương trông lộn xộn và không thể hiểu được. Vì vậy, chúng tôi sử dụng hiểu danh sách Python để chuyển đổi mức lương chuỗi thành số. Chúng tôi sẽ sử dụng cắt chuỗi, tách và nối, và liệt kê hiểu để đạt được kết quả mong muốn.

Mức lương = ['$ 876,001', '$ 543,903', '$ 2453,896']
[int(''.join(s[1:].split(','))) cho s trong tiền lương]

Đầu ra là:

Trực quan hóa dữ liệu trong Python

Trực quan hóa dữ liệu giúp bạn hiểu dữ liệu một cách trực quan để các xu hướng, mô hình và mối tương quan có thể được phơi bày. Bạn có thể dịch một lượng lớn dữ liệu thành đồ thị, biểu đồ và các hình ảnh khác để xác định các ngoại lệ và có được thông tin chi tiết có giá trị.

Chúng ta có thể sử dụng matplotlib để trực quan hóa dữ liệu, như hình dưới đây.

Nhập các thư viện cần thiết như hình dưới đây.

Nhập khẩu gấu trúc dưới dạng PD
Nhập matplotlib.pyplot dưới dạng plt

Lập khung dữ liệu gấu trúc về trường học, tên và tiền lương. Ví dụ: bạn có thể chuyển đổi các trường thành khung dữ liệu như:

df_school = PD. DataFrame (trường học)
in(df_school)

Đầu ra là:

Tương tự như vậy, bạn có thể làm tương tự cho tiền lương và tên.

Để trực quan hóa dữ liệu, chúng ta có thể vẽ biểu đồ thanh như hình dưới đây.

df.plot(kind='barh', x = 'Tổng thống', y = 'lương')

Đầu ra là:

Tại sao proxy cần thiết để quét web?

Web scraping giúp các doanh nghiệp trích xuất thông tin hữu ích về thông tin chi tiết về thị trường và các ngành để cung cấp các dịch vụ dựa trên dữ liệu và đưa ra quyết định dựa trên dữ liệu. Proxy rất cần thiết để thu thập dữ liệu từ các trang web khác nhau vì những lý do sau một cách hiệu quả.

  • Tránh lệnh cấm IP - Để ngăn chặn người quét đưa ra quá nhiều yêu cầu, các trang web kinh doanh giới hạn lượng dữ liệu có thể thu thập dữ liệu được gọi là Tốc độ thu thập dữ liệu. Tốc độ thu thập dữ liệu làm chậm tốc độ của trang web và người dùng khó truy cập nội dung mong muốn một cách hiệu quả. Tuy nhiên, nếu bạn sử dụng đủ proxy để thu thập dữ liệu, bạn sẽ vượt qua giới hạn tốc độ trên trang web mục tiêu. Đó là bởi vì các proxy gửi yêu cầu từ các địa chỉ IP khác nhau, do đó cho phép bạn trích xuất dữ liệu từ các trang web theo yêu cầu của bạn.
  • Cho phép truy cập vào nội dung theo khu vực cụ thể - Các doanh nghiệp phải theo dõi đối thủ cạnh tranh (trang web) của họ để cung cấp các tính năng và giá sản phẩm phù hợp cho khách hàng trong một khu vực địa lý cụ thể. Họ có thể truy cập tất cả nội dung có sẵn trong khu vực đó bằng cách sử dụng proxy dân cư có địa chỉ IP.
  • Bảo mật nâng cao – Một máy chủ proxy thêm một lớp bảo mật bổ sung bằng cách ẩn địa chỉ IP của thiết bị của người dùng.

Bạn có biết cần bao nhiêu proxy để có được những lợi ích trên không? Bạn có thể tính toán số lượng proxy cần thiết bằng cách sử dụng công thức này:

Số lượng proxy = Số lượng yêu cầu truy cập / Tốc độ thu thập dữ liệu

Số lượng yêu cầu truy cập phụ thuộc vào các tham số sau.

  • Tần suất mà scraper trích xuất thông tin từ một trang web
  • Số lượng trang mà người dùng muốn cạo

Mặt khác, tốc độ thu thập dữ liệu bị giới hạn bởi số lượng yêu cầu mà người dùng thực hiện trong một khoảng thời gian nhất định. Một số trang web cho phép một số lượng yêu cầu giới hạn cho mỗi người dùng để phân biệt yêu cầu người dùng tự động và con người. 

Sử dụng proxy trong Python

Bạn có thể sử dụng proxy trong Python bằng cách làm theo các bước bên dưới.

  • Bạn phải nhập mô-đun yêu cầu của Python.
Yêu cầu nhập khẩu
  • Bạn có thể tạo một nhóm proxy để xoay chúng.
proxy = 'http://114.121.248.251:8080'url = 'https://ipecho.net/plain'
  • Bạn có thể sử dụng requests.get() để gửi yêu cầu GET bằng cách truyền proxy làm tham số đến URL.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • Bạn có thể lấy nội dung của URL được yêu cầu nếu không có lỗi kết nối.
in (page.text)

Đầu ra là:

Kết thúc

Chúng tôi đã thảo luận rằng chúng tôi có thể sử dụng quét web để trích xuất dữ liệu từ các trang web thay vì sử dụng quét thủ công. Web scraping là hiệu quả chi phí và một quá trình tiết kiệm thời gian. Các doanh nghiệp sử dụng nó để thu thập và tái cấu trúc thông tin web để đưa ra quyết định dựa trên dữ liệu và đạt được những hiểu biết có giá trị. Việc sử dụng proxy là điều cần thiết để quét web an toàn vì nó ẩn địa chỉ IP ban đầu của người dùng khỏi trang web mục tiêu. Bạn có thể sử dụng trung tâm dữ liệu hoặc proxy dân cư để quét web. Nhưng thích sử dụng proxy dân dụng vì chúng nhanh và không thể dễ dàng phát hiện. Hơn nữa, chúng ta có thể sử dụng các biểu thức chính quy trong Python để khớp hoặc tìm các bộ chuỗi. Nó có nghĩa là chúng ta có thể trích xuất bất kỳ mẫu chuỗi nào từ văn bản với sự trợ giúp của các biểu thức chính quy. Chúng tôi cũng thấy rằng trực quan hóa dữ liệu chuyển đổi lượng dữ liệu khổng lồ thành biểu đồ, đồ thị và các hình ảnh khác giúp chúng tôi phát hiện sự bất thường và xác định các xu hướng hữu ích trong dữ liệu.