Hướng dẫn basic web crawler python - Python trình thu thập thông tin web cơ bản
91 / 100 / 100 Show
Nội dung chính
Cách crawl dữ liệu web hay cách thu thập dữ liệu web là một thắc mắc của khá nhiều bạn. Lý do bởi hiện nay, có vô vàn các website ở đủ mọi lĩnh vực cung cấp cho chúng ta rất nhiều thông tin hữu ích. Đôi khi, chúng ta sẽ muốn tổng hợp lại các thông tin này lại một chỗ để có thể dễ dàng sử dụng, phân tích,… Do vậy, bài viết này Lập Trình Không Khó sẽ hướng dẫn bạn các kiến thức cơ bản nhất về cách crawl (thu thập) dữ liệu web và có một vài demo bằng ngôn ngữ Python. Để có thể nắm được tốt nhất nội dung của bài viết này, người đọc nên có sẵn 1 số kiến thức/kinh nghiệm sau:
Nếu bạn không có sẵn các chuyên môn yêu cầu phía trên thì cũng không cần quá lo lắng. Bạn vẫn có thể nắm được cơ chế hoạt động, các kiến thức cơ bản và thực hành cùng tụi mình. Lưu ý 1: Các kiến thức trong bài này áp dụng cho các website không áp dụng cơ chế lazy load. Thường sẽ là các website tin tức hay các website nhỏ. Trong khi đó khá nhiều website có cơ chế lazy load thì ngoài các kiến thức cơ bản trong bài viết này, ta sẽ cần các kỹ thuật nâng cao hơn.Các kiến thức trong bài này áp dụng cho các website không áp dụng cơ chế lazy load. Thường sẽ là các website tin tức hay các website nhỏ. Trong khi đó khá nhiều website có cơ chế lazy load thì ngoài các kiến thức cơ bản trong bài viết này, ta sẽ cần các kỹ thuật nâng cao hơn. Lưu ý 2: Trong quá trình thực hành, bạn chú ý tránh spam làm ảnh hưởng tới hoạt động bình thường của các website. Nếu cần, nên chạy vào ban đêm và để tốc độ vừa phải.Trong quá trình thực hành, bạn chú ý tránh spam làm ảnh hưởng tới hoạt động bình thường của các website. Nếu cần, nên chạy vào ban đêm và để tốc độ vừa phải. Chúng ta cùng bắt đầu nhé!
Kiến thức crawl dữ liệu webMã nguồn của trang (Page source)Cách crawl dữ liệu web hay cách thu thập dữ liệu web là một thắc mắc của khá nhiều bạn. Lý do bởi hiện nay, có vô vàn các website ở đủ mọi lĩnh vực cung cấp cho chúng ta rất nhiều thông tin hữu ích. Đôi khi, chúng ta sẽ muốn tổng hợp lại các thông tin này lại một chỗ để có thể dễ dàng sử dụng, phân tích,… Do vậy, bài viết này Lập Trình Không Khó sẽ hướng dẫn bạn các kiến thức cơ bản nhất về cách crawl (thu thập) dữ liệu web và có một vài demo bằng ngôn ngữ Python. Để có thể nắm được tốt nhất nội dung của bài viết này, người đọc nên có sẵn 1 số kiến thức/kinh nghiệm sau: Nắm được cấu trúc của 1 website.tất cả những gì bạn thấy trên trang web đều có thể thu thập được bằng ngôn ngữ lập trình. Có kiến thức về HTML, CSS selector, XPath Có kiến thức căn bản về ngôn ngữ lập trình Python
Lưu ý 2: Trong quá trình thực hành, bạn chú ý tránh spam làm ảnh hưởng tới hoạt động bình thường của các website. Nếu cần, nên chạy vào ban đêm và để tốc độ vừa phải. Tìm kiếm phần tửChúng ta cùng bắt đầu nhé! Các thư viện crawl dữ liệu trong PythonThực hành thu thập dữ liệu web # Vd1. Thu thập thông tin bài báo CNN
div.container > h3#top-site
Nếu coi page source là một file xml thì ta có cách tìm kiếm theo XPath. Ví dụ dùng css selector để tìm tới thẻ h3 (trong ví dụ trên) có chứa giá trị Danh sách website://*[@id=”top-site”]
Cách lấy CSS Selector/XPath của phần tử Trên trình duyệt, bạn cũng có thể dễ dàng copy selector hoặc xpath bằng cách chuột phải vào phần tử tại Dev Tools (Ctrl + Shift + I) như hình dưới đây:Cách copy CSS Selector hoặc XPath trên Dev Tools của trình duyệtCtrl + Shift + I) như hình dưới đây: Xem gif để dễ hình dung hơn cách lấy xpath/css selector của một phần tử bất kỳ:Cách lấy xpath, selector của một element trên webpage Quy trình: Đặt chuột vào phần tử cần lấy -> Click chuột phải -> Inspect -> Chuột phải vào source của nó -> Copy -> Copy Selector/Xpath.Các thư viện crawl dữ liệu trong Python Đặt chuột vào phần tử cần lấy -> Click chuột phải -> Inspect -> Chuột phải vào source của nó -> Copy -> Copy Selector/Xpath. Có thể nói, Python là ngôn ngữ đơn giản nhất giúp bạn có thể viết script crawl dữ liệu website nhanh chóng. Lý do bởi bản thân ngôn ngữ nó hỗ trợ rất tốt, lại còn kho tàng thư viện có sẵn hỗ trợ tận răng. Đó cũng là lý do mình chọn ngôn ngữ này để demo trong bài viết này.# Thư viện requests Với thư viện này, bạn có thể dễ dàng thực hiện gửi các yêu cầu (request) tới địa chỉ bất kỳ. Sau đó bạn sẽ nhận được phản hồi dưới dạng page source. Các chức năng cơ bản của thư viện này:Tạo request, có thể có tham số (url params, body params, …) theo method bất kỳ (GET, POST, …)
Cài đặt: pip install requests
Thư viện này sẽ hỗ trợ bạn “làm đẹp” cái source mà bạn nhận được mỗi khi gửi request. Sau khi làm đẹp, bạn có thể thực hiện mọi thao tác tìm kiếm, trích xuất giá trị mà mình cần tìm từ source.Cài đặt: pip install beautifulsoup4 Cài đặt: pip install requests
Thư viện này sẽ hỗ trợ bạn “làm đẹp” cái source mà bạn nhận được mỗi khi gửi request. Sau khi làm đẹp, bạn có thể thực hiện mọi thao tác tìm kiếm, trích xuất giá trị mà mình cần tìm từ source.Cài đặt: pip install beautifulsoup4lazy load phức tạp. Các thành phần trên web chỉ yêu cầu tới máy chủ khi người dùng đang xem nó. Khi đó, một webpage mà bạn thấy được tạo ra bởi nhiều hơn 1 request (vd: Facebook, Instagram, …) đều có cơ chế này.
Với các website sử dụng cơ chế lazy load phức tạp. Các thành phần trên web chỉ yêu cầu tới máy chủ khi người dùng đang xem nó. Khi đó, một webpage mà bạn thấy được tạo ra bởi nhiều hơn 1 request (vd: Facebook, Instagram, …) đều có cơ chế này. selenium scrapyƯu điểm của các thư viện này là chúng giả lập trình duyệt luôn, nên không bỏ sót bất kỳ request nào. Nhưng như vậy ta phải tải tất cả nội dung mà có thể chẳng cần đến, dẫn đến quá trình thu thập sẽ chậm hơn nhiều. Do đây là bài hướng dẫn cơ bản, mình sẽ không đi sâu vào dạng phức tạp này.Thực hành thu thập dữ liệu web
Kết quả thực thi:
# Vd2. Thu thập tag phổ biến trên StackOverflow
Source code kèm giải thích:
Kết quả chạy:
# Vd3. Sử dụng Github API yêu cầu đăng nhập
Kết quả chạy:
# Ví dụ sử dụng SeleniumVới Selenium, nếu bạn đọc quan tâm có thể theo dõi các bài viết trong series Selenium không khó, series này bao gồm:
Lập Trình Không Khó có cung cấp dịch vụ thu thập & phân tích dữ liệu web, bạn đọc quan tâm có thể tham khảo chi tiết & liên hệ sử dụng dịch vụ TẠI ĐÂY Bài viết liên quan
Cảm ơn các bạn đã theo dõi bài viết hướng dẫn crawl dữ liệu website với Python. Trong quá trình tìm hiểu, thực hành. Nếu bạn đọc có thắc mắc thì có thể đặt câu hỏi tại:
|