Web scraping là nghệ thuật trích xuất dữ liệu từ một trang web dưới dạng tự động và có cấu trúc tốt. Có thể có nhiều định dạng khác nhau để trích xuất 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, theo dõi 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ưới dạng tự động và có cấu trúc tốt. Có thể có nhiều định dạng khác nhau để trích xuất 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, theo dõi 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ụ để tận dụng tối đa 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 khi mọi người biết ít nhất những điều cơ bản về web scraping để hưởng lợi từ nó.
Bài viết này sẽ đề cập đến những điều cơ bản về web scraping bằng cách sử dụng framework của Python có tên là Beautiful Soup. Chúng tôi sẽ sử dụng Google Colab làm môi trường mã hóa.
Trước hết, chúng ta cần xác định trang web mà chúng ta muốn thu thập và gửi yêu cầu HTTP đến URL đó. Đáp lại, máy chủ sẽ trả về nội dung HTML của trang web. Đối với tác vụ này, chúng ta sẽ sử dụng thư viện HTTP của bên thứ ba để xử lý các yêu cầu python. Sau khi truy cập thành công nội dung HTML, nhiệm vụ chính sẽ là phân tích cú pháp dữ liệu . Chúng ta không thể xử lý dữ liệu chỉ thông qua xử lý chuỗi vì hầu hết dữ liệu HTML đều được lồng nhau. Đó là lúc trình phân tích cú pháp phát huy tác dụng, 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 trình phân tích cú pháp HTML tiên tiến nhất là html5lib. Tiếp theo là duyệt cây, bao gồm điều hướng và tìm kiếm cây phân tích cú pháp. Với mục đích này, chúng ta sẽ sử dụng Beautiful Soup (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 thu thập dữ liệu web hoạt động như thế nào. Hãy bắt đầu với việc 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. Nhưng nếu các câu lệnh 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 số gói bằng các lệnh sau:
pip cài đặt yêu cầu pip cài đặt html5lib pip cài đặt bs4
Bước 2: Truy cập Nội dung HTML từ Trang web
yêu cầu nhập URL = "http://www.values.com/inspirational-quotes" r = requests.get(URL) print(r.content)
Nó sẽ hiển thị kết quả của biểu mẫu,
Chúng ta hãy thử hiểu đoạn mã này,
Ở dòng mã đầu tiên, chúng ta nhập thư viện yêu cầu. Sau đó, chúng ta chỉ định URL của trang web mà chúng ta muốn thu thập. Ở dòng mã thứ ba, chúng ta gửi yêu cầu HTTP đến URL đã chỉ định và lưu phản hồi của máy chủ trong một đối tượng có tên là r. Cuối cùng, print(r.content) trả về nội dung HTML thô của trang web.
Bước 3: Phân tích nội dung HTML
nhập yêu cầu từ bs4 nhập BeautifulSoup URL = "http://www.values.com/inspirational-quotes" r = requests. get (URL) soup = 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 print (soup.prettify())
Đầu ra:
Nó cho ra một kết quả 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à thư viện trình phân tích cú pháp được chỉ định được tạo đồng thời.
Trong đoạn mã trên, chúng ta đã tạo đố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 ra, cung cấp cho cây phân tích cú pháp biểu diễn trực quan từ nội dung HTML thô.
Bước 4: Tìm kiếm và điều hướng cây phân tích
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 soup 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 thu thập một trang web bao gồm một số trích dẫn. Vì vậy, chúng tôi sẽ tạo một chương trình giải quyết các trích dẫn này. Mã được đưa ra bên dưới,
#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 đi sâu 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 phần trích dẫn.
Bây giờ tôi sẽ giải thích cách chúng ta thực hiện điều này trong đoạn mã trên,
Nếu chúng ta duyệt 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 tìm phần tử div đó (được gọi là bảng trong mã) bằ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à phần tử kiểu từ điển để chỉ định các thuộc tính bổ sung liên quan đến thẻ đó. Phương thức find() trả về phần tử khớp đầu tiên. Người ta có thể thử table.prettify() để hiểu rõ hơn về chức năng của đoạn mã này.
Nếu chúng ta tập trung vào phần tử bảng, vùng chứa div chứa mỗi quote có lớp là quote. Vì vậy, chúng ta sẽ lặp qua mỗi div chứa có lớp là quote.
Ở đây, phương thức findAll() rất hữu ích, tương tự như phương thức find() về mặt đối số, nhưng điểm khác biệt chính là nó trả về danh sách tất cả các phần tử khớp.
Chúng tôi đang lặp lại từng trích dẫn bằng cách sử dụng một biến gọi là row.
Hãy cùng 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 ta đ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 vào cấu trúc lồng nhau. Để truy cập vào văn bản bên trong phần tử HTML, chúng ta sử dụng .text:
Ngoài ra, 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 đã thực hiện điều này bằng cách coi thẻ như một từ điển:
trích dẫn [ 'url' ] = hàng .a [ 'href' ]
Sau đó, chúng tôi đã thêm tất cả các dấu ngoặc kép vào danh sách được gọi là dấu ngoặc kép.
Cuối cùng, chúng ta sẽ tạo một tệp CSV để lưu dữ liệu.
tên tệp = 'inspirational_quotes.csv'
Chúng tôi đã đặt tên cho tệp của mình là inspirational_qoutes.csv và lưu tất cả các trích dẫn trong đó để sử dụng trong tương lai. Tệp inspirational_quotes.csv của chúng tôi trông như thế này:
Trong kết quả đầu ra ở trên, chúng tôi chỉ hiển thị ba hàng, nhưng thực tế có tới 33 hàng. Điều này có nghĩa là chúng tôi đã trích xuất được một lượng dữ liệu đáng kể từ trang web chỉ bằng một lần thử đơn giản.
Lưu ý: Trong một số trường hợp, việc thu thập dữ liệu web được coi là bất hợp pháp, có thể khiến địa chỉ IP của bạn bị trang web chặn vĩnh viễn. Vì vậy, bạn cần cẩn thận và chỉ thu thập dữ liệu từ những trang web và trang web cho phép thực hiện.
Một số tình huống thực tế mà việc thu thập dữ liệu web có thể có ích rất lớn 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 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 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 khắp internet.
Nghiên cứu thị trường
Thực hiện nghiên cứu thị trường đúng cách 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 hoạt động thu thập dữ liệu web có khối lượng lớn, chất lượng cao và có độ sâu sắc cao, có thể có nhiều 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 thông tin kinh doanh. Trọng tâm chính của nghiên cứu thị trường là các khía cạnh kinh doanh sau:
Tạo danh sách
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 loại hình kinh doanh, ví dụ như bất động sản và cửa hàng thương mại điện tử. Một công cụ web scraping có thể giúp doanh nghiệp duyệt qua hàng nghì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ả 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 nhiều doanh nghiệp thu thập và so sánh thông tin và cung cấp dữ liệu đó theo 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, có thể tạo danh sách 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 đó, web scraping sẽ giúp người tiêu dùng dễ dàng ra quyết định hơn nhiều bằng cách hiển thị nhiều phân tích sản phẩm 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ị thông tin đó theo dạng có tổ chức cho người dùng. Hãy xem xét trường hợp của các trình tổng hợp tin tức. Web scraping sẽ được sử dụng theo những cách sau:
Sử dụng công cụ trích xuất dữ liệu 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. Công cụ này có thể giúp thu thập các liên kết đến các video và bài viết hữu ích. Xây dựng dòng thời gian theo tin tức. Nắm bắt xu hướng theo người đọc 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 web scraper đơn giản trong Python. Bây giờ bạn có thể scraping 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 thực tế trong đó web scraping 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 này 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 thu thập dữ liệu web của mình, đừng quên xem qua ProxyScrape dành cho dân dụng và cao cấp .