Web Scraping cho người mới bắt đầu: Khái niệm cơ bản & Framework sử dụng Python

trăn, cạo, Mar-29-20215 phút đọc

Web scraping là nghệ thuật trích xuất dữ liệu từ một trang web ở dạng tự động và có cấu trúc tốt. Có thể có các định dạng khác nhau để cạo dữ liệu như excel, CSV và nhiều định dạng khác. Một số trường hợp sử dụng thực tế của web scraping là nghiên cứu thị trường, giám sát giá, thông tin giá cả, nghiên cứu thị trường và tạo khách hàng tiềm năng. Web scraping là một công cụ

Web scraping là nghệ thuật trích xuất dữ liệu từ một trang web ở dạng tự động và có cấu trúc tốt. Có thể có các định dạng khác nhau để cạo dữ liệu như excel, CSV và nhiều định dạng khác. Một số trường hợp sử dụng thực tế của web scraping là nghiên cứu thị trường, giám sát giá, thông tin giá cả, nghiên cứu thị trường và tạo khách hàng tiềm năng. Web scraping là một kỹ thuật công cụ để sử dụng tốt nhất dữ liệu có sẵn công khai và đưa ra quyết định thông minh hơn. Vì vậy, thật tuyệt vời khi mọi người biết ít nhất những điều cơ bản về quét web để hưởng lợi từ nó.

Bài viết này sẽ đề cập đến những điều cơ bản về quét web bằng cách chơi xung quanh với khung công tác của Python được gọi là Beautiful Soup. Chúng tôi sẽ sử dụng Google Colab làm môi trường mã hóa của chúng tôi.

Các bước liên quan đến Web Scraping bằng Python

Trước hết, chúng ta cần xác định trang web mà chúng ta muốn cạo và gửi yêu cầu HTTP đến URL đó. Đáp lại, máy chủ trả về nội dung HTML của trang web. Đối với tác vụ này, chúng tôi sẽ sử dụng thư viện HTTP của bên thứ ba để xử lý các yêu cầu python. Khi chúng ta truy cập thành công nội dung HTML, nhiệm vụ chính là phân tích cú pháp dữ liệu. Chúng ta không thể xử lý dữ liệu đơn giản thông qua xử lý chuỗi vì hầu hết dữ liệu HTML được lồng vào nhau. Đó là nơi trình phân tích cú pháp xuất hiện, tạo cấu trúc cây lồng nhau của dữ liệu HTML. Một trong những thư viện phân tích cú pháp HTML tiên tiến nhất là html5lib. Tiếp đến là cây traversal, bao gồm điều hướng và tìm kiếm cây phân tích. Với mục đích này, chúng tôi sẽ sử dụng Beautiful Soup (một thư viện python của bên thứ ba). Thư viện Python này được sử dụng để kéo dữ liệu ra khỏi các tệp HTML và XML.

Bây giờ chúng ta đã thấy quá trình quét web hoạt động như thế nào. Hãy bắt đầu với mã hóa,

Bước 1: Cài đặt thư viện của bên thứ ba

Trong hầu hết các trường hợp, Colab đi kèm với các gói của bên thứ ba đã được cài đặt. Tuy nhiên, nếu báo cáo nhập của bạn không hoạt động, bạn có thể giải quyết vấn đề này bằng cách cài đặt một vài gói bằng các lệnh sau, 

Yêu cầu cài đặt pip
pip cài đặt html5lib
 Cài đặt pip BS4

Bước 2: Truy cập nội dung HTML từ trang web

Yêu cầu nhập khẩu 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
In (r.content)

Nó sẽ hiển thị đầu ra của biểu mẫu,

Hãy cố gắng hiểu đoạn mã này,

Trong dòng code đầu tiên, chúng ta đang import thư viện requests. Sau đó, chúng tôi chỉ định URL của trang web mà chúng tôi muốn cạo. Trong dòng mã thứ ba, chúng tôi gửi yêu cầu HTTP đến URL được chỉ định và lưu phản hồi của máy chủ trong một đối tượng có tên r.Finally print(r.content) trả về nội dung HTML thô của trang web.

Bước 3: Phân tích cú pháp nội dung HTML

Yêu cầu nhập khẩu 
từ bs4 nhập khẩu BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = yêu cầu. get(URL) 
  
súp = BeautifulSoup (r.content, 'html5lib') # Nếu dòng này gây ra lỗi, hãy chạy 'pip install html5lib' hoặc cài đặt html5lib 
in(súp.prettify())

Ra:

Nó cho một đầu ra rất dài; Một số ảnh chụp màn hình được đính kèm bên dưới.

Một trong những điều tuyệt vời nhất về Beautiful Soup là nó được xây dựng trên các thư viện phân tích cú pháp HTML như html5lib, html.parse, lxml, v.v. cho phép đối tượng của Beautiful Soap và chỉ định thư viện phân tích cú pháp được tạo đồng thời. 

Trong đoạn code trên, chúng ta đã tạo ra đối tượng Beautiful Soup bằng cách truyền hai đối số:

r.content: Nội dung HTML thô.

html5lib: Chỉ định trình phân tích cú pháp HTML mà chúng ta muốn sử dụng.

Cuối cùng, soup.prettify() được in, cho phép biểu diễn trực quan cây phân tích cú pháp từ nội dung HTML thô.

Bước 4: Tìm kiếm và điều hướng cây phân tích cú pháp

Bây giờ là lúc để trích xuất một số dữ liệu hữu ích từ nội dung HTML. Các đối tượng súp chứa dữ liệu dưới dạng cấu trúc lồng nhau, có thể được trích xuất theo chương trình. Trong trường hợp của chúng tôi, chúng tôi đang cạo một trang web bao gồm một số trích dẫn. Vì vậy, chúng tôi sẽ tạo ra một chương trình giải quyết các trích dẫn này. Mã được đưa ra dưới đây,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Trước khi tiến xa hơn, bạn nên xem qua nội dung HTML của trang web mà chúng tôi đã in bằng phương thức soup.prettify() và cố gắng tìm một mẫu để điều hướng đến dấu ngoặc kép.

Bây giờ tôi sẽ giải thích làm thế nào chúng ta thực hiện điều này trong đoạn mã trên, 

Nếu chúng ta điều hướng qua các dấu ngoặc kép, chúng ta sẽ thấy rằng tất cả các dấu ngoặc kép đều nằm trong một vùng chứa div có id là 'all_quotes.' Vì vậy, chúng ta thấy rằng phần tử div (được gọi là bảng trong mã) sử dụng phương thức find():

table = soup.find('div', attrs = {'id':'all_quotes'})

Đối số đầu tiên trong hàm này là thẻ HTML cần được tìm kiếm. Đối số thứ hai là một phần tử kiểu từ điển để chỉ định các thuộc tính bổ sung được liên kết với thẻ đó. Phương thức find() trả về phần tử phù hợp đầu tiên. Người ta có thể thử table.prettify() để có cảm giác tốt hơn về những gì đoạn mã này làm.

Nếu chúng ta tập trung vào phần tử table, div container chứa mỗi quote có lớp là quote. Vì vậy, chúng ta sẽ lặp qua từng div container có lớp được trích dẫn.

Ở đây phương thức findAll() rất hữu ích tương tự như phương thức find() khi có liên quan đến các đối số, nhưng sự khác biệt chính là nó trả về một danh sách tất cả các phần tử phù hợp. 

Chúng tôi đang lặp qua mỗi trích dẫn bằng cách sử dụng một biến gọi là hàng.

Hãy phân tích một mẫu nội dung hàng HTML để hiểu rõ hơn:

Bây giờ hãy xem xét đoạn mã sau:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Ở đây chúng tôi đang tạo một từ điển để lưu tất cả thông tin về một trích dẫn. Ký hiệu chấm được sử dụng để truy cập cấu trúc lồng nhau. Để truy cập văn bản bên trong phần tử HTML, chúng ta sử dụng .text:

Hơn nữa, chúng ta cũng có thể thêm, xóa, sửa đổi và truy cập các thuộc tính của thẻ. Chúng tôi đã làm điều này bằng cách coi thẻ như một từ điển:

quote['url'] = row.a['href']

Sau đó, chúng tôi đã thêm tất cả các trích dẫn vào danh sách được gọi là dấu ngoặc kép. 

Cuối cùng, chúng tôi sẽ tạo một tệp CSV, tệp này sẽ được sử dụng để lưu dữ liệu của chúng tôi.

tên tệp = 'inspirational_quotes.csv'

Chúng tôi đã đặt tên tệp của mình inspirational_qoutes.csv và lưu tất cả các trích dẫn trong đó để sử dụng trong tương lai. Đây là cách tệp inspirational_quotes.csv của chúng tôi trông như thế nào,

Trong đầu ra ở trên, chúng tôi chỉ hiển thị ba hàng, nhưng thực tế có 33 hàng. Vì vậy, điều này có nghĩa là chúng tôi đã trích xuất một lượng dữ liệu đáng kể từ trang web chỉ bằng cách thử đơn giản. 

Lưu ý: Trong một số trường hợp, việc quét web được coi là bất hợp pháp, điều này có thể gây ra việc trang web chặn địa chỉ IP của bạn vĩnh viễn. Vì vậy, bạn cần phải cẩn thận và chỉ cạo những trang web và trang web cho phép nó. 

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

Một số kịch bản trong thế giới thực trong đó việc quét web có thể được sử dụng rộng rãi là,

Tạo khách hàng tiềm năng

Một trong những hoạt động bán hàng quan trọng đối với hầu hết các doanh nghiệp là tạo ra khách hàng tiềm năng. Theo báo cáo của Hubspot, tạo lưu lượng truy cập và khách hàng tiềm năng là ưu tiên số một của 61% các nhà tiếp thị trong nước. Web scraping có thể đóng một vai trò trong đó bằng cách cho phép các nhà tiếp thị truy cập vào danh sách khách hàng tiềm năng có cấu trúc trên internet.

Nghiên cứu thị trường 

Thực hiện nghiên cứu thị trường đúng là yếu tố quan trọng nhất của mọi doanh nghiệp đang hoạt động, và do đó nó đòi hỏi thông tin có độ chính xác cao. Phân tích thị trường đang được thúc đẩy bởi việc quét web khối lượng lớn, chất lượng cao và sâu sắc, có thể có kích thước và hình dạng khác nhau. Dữ liệu này có thể là một công cụ rất hữu ích để thực hiện nghiệp vụ thông minh. Trọng tâm chính của nghiên cứu thị trường là về các khía cạnh kinh doanh sau:

  • Nó có thể được sử dụng để phân tích xu hướng thị trường.
  • Nó có thể giúp chúng tôi dự đoán giá cả thị trường.
  • Nó cho phép tối ưu hóa các điểm vào theo nhu cầu của khách hàng.
  • Nó có thể rất hữu ích trong việc theo dõi các đối thủ cạnh tranh.

Tạo thông tin đăng tải

Web scraping có thể là một kỹ thuật rất tiện dụng và hiệu quả để tạo danh sách theo các loại hình kinh doanh, ví dụ: bất động sản và cửa hàng Thương mại điện tử. Một công cụ quét web có thể giúp doanh nghiệp duyệt hàng ngàn danh sách sản phẩm của đối thủ cạnh tranh trên cửa hàng của họ và thu thập tất cả các thông tin cần thiết như giá cả, chi tiết sản phẩm, biến thể và đánh giá. Nó có thể được thực hiện chỉ trong vài giờ, điều này có thể giúp tạo danh sách của riêng mình, do đó tập trung nhiều hơn vào nhu cầu của khách hàng.

So sánh thông tin

Web scraping giúp các doanh nghiệp khác nhau thu thập và so sánh thông tin và cung cấp dữ liệu đó một cách có ý nghĩa. Hãy xem xét các trang web so sánh giá trích xuất các bài đánh giá, tính năng và tất cả các chi tiết cần thiết từ nhiều trang web khác. Những chi tiết này có thể được biên soạn và điều chỉnh để dễ dàng truy cập. Vì vậy, một danh sách có thể được tạo từ các nhà bán lẻ khác nhau khi người mua tìm kiếm một sản phẩm cụ thể. Do đó, việc quét web sẽ làm cho quá trình ra quyết định dễ dàng hơn rất nhiều cho người tiêu dùng bằng cách hiển thị các phân tích sản phẩm khác nhau theo nhu cầu của người tiêu dùng.

Thông tin tổng hợp

Web scraping có thể giúp tổng hợp thông tin và hiển thị nó trong một hình thức có tổ chức cho người dùng. Hãy xem xét trường hợp của các nhà tổng hợp tin tức. Web scraping sẽ được sử dụng theo những cách sau,

Sử dụng quét web, người ta có thể thu thập các bài viết chính xác và có liên quan nhất. Nó có thể giúp thu thập liên kết cho các video và bài viết hữu ích. Xây dựng các mốc thời gian theo tin tức. Nắm bắt xu hướng theo độc giả của tin tức.

Vì vậy, trong bài viết này, chúng tôi đã có một phân tích chuyên sâu về cách thức hoạt động của web scraping khi xem xét một trường hợp sử dụng thực tế. Chúng tôi cũng đã thực hiện một bài tập rất đơn giản về việc tạo một trình quét web đơn giản bằng Python. Bây giờ bạn có thể cạo bất kỳ trang web nào khác mà bạn chọn. Hơn nữa, chúng tôi cũng đã thấy một số tình huống trong thế giới thực trong đó việc quét web có thể đóng một vai trò quan trọng. Chúng tôi hy vọng rằng bạn thích bài viết và mọi thứ đều rõ ràng, thú vị và dễ hiểu.  

Nếu bạn đang tìm kiếm các dịch vụ proxy tuyệt vời cho các dự án quét web của mình, đừng quên xem ProxyScrapeproxy dân dụngcao cấp.