in ,

Cách tự cào một trang web tự động theo giờ định sẵn

Cào trang web (Web scraping) là quá trình trích xuất dữ liệu từ các trang web ở định dạng có cấu trúc. Đó là một trong những cách hiệu quả nhất để lấy dữ liệu từ các trang web trực tuyến – đặc biệt nếu bạn cần dữ liệu để cung cấp vào một ứng dụng hoặc một trang web khác.

Xem thêm: 5 công cụ cào dữ liệu trên web cực hay (Web Scraping)

Thao tác cào trang web phục vụ rất nhiều nhu cầu như thu thập dữ liệu nghiên cứu thị trường, giám sát sản phẩm, nghiên cứu,… Hôm trước mình có giới thiệu các bạn các công cụ hỗ trợ thực hiện rồi. Trong bài này, mình sẽ đi sâu hơn một xíu là mình sẽ cào web tự động bằng một số thủ thuật thay vì làm thủ công.

Phương pháp đầu tiên là một cách thân thiện với người mới bắt đầu để thu thập dữ liệu bằng cách sử dụng một giải pháp có sẵn. Phương pháp thứ hai thì có vẻ bạn phải biết lập trình chút ít vì sử dụng Scrapy để code, nó hỗ trợ quét dữ liệu mạnh mẽ nếu biết cách làm.

Phương pháp 1: Dùng Octoparse

Nếu bạn không phải là dân lập trình hoặc không quen thuộc với Python, đây là giải pháp dễ dàng cho bạn. Có rất nhiều công cụ trên thị trường để quét dữ liệu trên web cho phép bạn thao tác mà không cần lập trình. Octoparse là một công cụ như vậy.

Octoparse cho phép bạn thực hiện kéo dữ liệu các trang web theo ba bước đơn giản. May mắn thay, nó cung cấp một gói miễn phí thông qua ứng dụng của mình để quét dữ liệu cục bộ, cho phép bạn thực hiện các nhiệm vụ thu thập dữ liệu nhỏ mà không cần đầu tư.

Hơn nữa, Octoparse có nhiều tính năng nâng cao để thực hành quét web mà không cần lập trình. Các mẫu template của nó khá thú vị cho phép bạn quét dữ liệu từ các trang web phổ biến mà không cần cấu hình. Ví dụ: bạn có thể chọn một mẫu dựng sẵn để thu thập dữ liệu sản phẩm từ Amazon hoặc eBay.

Sử dụng trích xuất dữ liệu tự động

Octoparse mạnh mẽ và tiện dụng. Lý do là nó hỗ trợ trích xuất dữ liệu từ các trang web một cách tự động. Đây là cách thực hiện:

Bước 1: Truy cập https://www.octoparse.com/signup và đăng ký một tài khoản miễn phí.

Truy cập https://www.octoparse.com/signup và đăng ký một tài khoản miễn phí.

Bước 2: Khi bạn xác nhận địa chỉ email của mình và đăng nhập vào Octoparse, bạn sẽ thấy màn hình thông báo Account’s ready! > nhấp vào Start Free Premium Trial.

Bước 3: Nhập chi tiết thẻ tín dụng của bạn hoặc thanh toán bằng PayPal để kích hoạt bản dùng thử.

Bước 4: Nhấp vào Download Our Free Software để tải xuống ứng dụng độc lập của nó cho máy tính của bạn – Windows hoặc macOS. Giải nén và mở file cài đặt để cài đặt ứng dụng của nó. Sau đó, làm theo hướng dẫn trên màn hình.

Nhấp vào Download Our Free Software để tải xuống ứng dụng độc lập của nó cho máy tính của bạn

Bước 5: Sau khi nó được cài đặt, hãy mở Octoparse và đăng nhập vào tài khoản của bạn. Hãy nhớ kiểm tra các tùy chọn Remember passwordAuto Login.

Cách tự cào một trang web tự động theo giờ định sẵn 1

Bước 6: Bạn sẽ thấy giao diện của Octoparse, nơi bạn có thể xem các video hướng dẫn.

Bước 7: Nhập địa chỉ web vào hộp văn bản và nhấn Bắt đầu . Ví dụ, mình sẽ bắt đầu với trang https://www.ebay.com/itm/Amazon-Echo-Dot-4th-Gen-With-Clock-2020-Smart-Speaker-Alexa-All-Colors-NEW/363219888368 để lấy data loa Amazon Echo Dot 4.

Cách tự cào một trang web tự động theo giờ định sẵn 2

Bước 8: Octoparse sẽ tải trang web và cố gắng phát hiện và trích xuất dữ liệu tự động. Bỏ chọn Click on a “Load More” button. Nếu dữ liệu hiển thị ở nửa dưới của ứng dụng không phải là thứ bạn đang tìm kiếm, hãy nhấp vào Switch auto-detect results để xem thêm các kết quả khác.,

Cách tự cào một trang web tự động theo giờ định sẵn 3

Bước 9: Khi bạn thấy dữ liệu mong đợi, hãy nhấp vào nút Create workflow.

Sử dụng trích xuất dữ liệu thủ công

Đôi khi, các tính năng trích xuất dữ liệu tự động của Octoparse có thể không là thứ bạn cần. Có thể trang web bạn đang cố gắng trích xuất dữ liệu phức tạp. Dù là trường hợp nào, bạn cũng có thể dùng Octoparse vì nó cũng cho phép chọn dữ liệu để trích xuất theo cách thủ công. Đây là cách thực hiện:

  • Làm theo các bước như phần trên cho đến bước 8.
  • Octoparse sẽ bắt đầu tải trang web và phát hiện dữ liệu để trích xuất. Bấm chọn mục Cancel Auto-Detect để trích xuất dữ liệu theo cách thủ công.

Cách tự cào một trang web tự động theo giờ định sẵn 4

  • Bây giờ hãy nhấp vào các mục dữ liệu trên trang web để trích xuất các dữ liệu đó. Ví dụ: tôi đã nhấp vào tiêu đề, giá và giao hàng của Echo Dot 4th Gen.
  • Trong hộp thoại Tips, bấm vào tùy chọn Extract data để kiểm tra.

Cách tự cào một trang web tự động theo giờ định sẵn 5

  • Cuối cùng, nhấp vào Save gần góc trên cùng bên trái của Octoparse để lưu nó.

Tự động hoá thao tác

Vậy là bạn đã biết cách trích xuất dữ liệu (cụ thể ở đây là thông tin giá cả từ eBay qua Octoparse). Tuy nhiên, nó vẫn chưa được tự động hóa. Đó là, bạn phải chạy nó theo cách thủ công. Phần này sẽ chỉ bạn cách tự động hóa nó để trích xuất dữ liệu theo định kỳ:

  • Trong tab task của bạn, nhấp vào Run gần góc trên cùng bên trái của Octoparse.
  • Nhấp vào nút Schedule task (Cloud) trong hộp thoại Run Task.
  • Nhấp vào Once, Weekly, Monthly, and Repeats, sau đó định cấu hình nó.
  • Cuối cùng, nhấp vào một trong các nút Save hoặc Save and Run để lưu nó.
  • Vậy là xong. Nhiệm vụ của bạn sẽ tự động chạy trong Octoparse Cloud theo lịch trình đã định cấu hình của bạn.
  • Bạn có thể xem dữ liệu bằng cách nhấp vào Dashboard, nhấp vào nút More trong phần task của bạn và chọn View data > Cloud data.

Cách tự cào một trang web tự động theo giờ định sẵn 6

Phương pháp 2: Sử dụng chương trình tùy chỉnh Scrapy

Nếu bạn đã thử phương pháp đầu tiên và muốn kiểm soát nhiều hơn hoặc bạn là một lập trình viên và muốn tìm hiểu phương pháp lập trình để quét các trang web, bạn phải thử phương pháp này. Ở đây mình sẽ sử dụng Scrapy để xây dựng giải pháp. Điều kiện là bạn có kiến ​​thức làm việc với HTML & CSS và Python.

Scrapy là một công cụ mã nguồn mở để trích xuất dữ liệu từ các trang web. Nó là một công cụ thu thập dữ liệu phổ biến. Theo kinh nghiệm của tôi, nó hoạt động tốt cho các dự án nhỏ hoặc lớn, nhưng bạn có thể yêu cầu cấu hình nó đúng cách và triển khai các công cụ của bên thứ ba để làm cho nó hiệu quả cho các dự án lấy dữ liệu lớn.

Điều kiện

Bạn có biết về selectors trong CSS không? Trên bất kỳ trang web nào, selectors giúp xác định và chọn các phần tử cụ thể .

Bạn có thể đọc về selectors trên W3Schools. Ví dụ: nếu bạn muốn tìm tất cả các tiêu đề trên một trang web, bạn có thể sử dụng selectorsh1. Dưới đây là cách tìm selectors của một phần tử trong Google Chrome:

Nhấp chuột phải vào phần tử trên trang> chọn Inspect. Ví dụ: ở dưới mình tìm bộ selectors của văn bản Example Domain bên dưới.

Cách tự cào một trang web tự động theo giờ định sẵn 7

Kích chuột phải vào các yếu tố dưới Elements, đi đến Copy > Copy selector.

Cách tự cào một trang web tự động theo giờ định sẵn 8

Sử dụng Scrapy

Trong ví dụ dưới đây, chúng ta cũng lấy dữ liệu giá giá Amazon Echo Dot 4th Gen từ eBay bằng cách sử dụng Scrapy. Bắt đầu nào:

Bước 1: Tạo một thư mục mới cho dự án của bạn, ví dụ là scrape-web-regularly.

Bước 2: Mở terminal lên, chuyển sang thư mục vừa tạo ở bước 1 (ví dụ cd scrape-web-regularly), sau đó chạy lệnh cài đặt Scrapy: pip install scrapy.

Bước 3: Nếu bạn gặp lỗi , hãy đọc kỹ thông báo để tìm các bước giảm thiểu. Ví dụ: nếu lỗi “error: Microsoft Visual C++ 14.0 or greater is required. Get it with Microsoft C++ Build Tools: https://visualstudio.microsoft.com/visual-cpp-build-tools/ “, bạn nên tải xuống và cài đặt nó từ liên kết đã cho, sau đó thử lại. Bạn cũng có thể sử dụng Anaconda để tải xuống các gói dựng sẵn.

Bước 4: Tạo một tệp mới trong thư mục này (“try-one.py”) và mở nó trong trình code editor. Sao chép mã dưới đây vào tệp này, thực hiện các thay đổi nếu cần, sau đó lưu nó.

import scrapy
 
class EBaySpider(scrapy.Spider):
    # name of the scraper
    name = 'ebay_spider'
 
    # link or URL to scrape from
    link1 = 'https://www.ebay.com/itm/Amazon-Echo-Dot-4th-Gen-With-Clock-2020-Smart-Speaker-Alexa-All-Colors-NEW/363219888368'
 
    # links or URLs to scrape data from
    start_urls = [link1]
 
    def parse(self, response, **kwargs):
        # select the element to scrape data from
        for title in response.css('#prcIum'):
            # extract the text data from element
            yield {'price': title.css('::text').get()}

Trong terminal, hãy chạy lệnh: scrapy runspider try-one.py để thực hiện việc cào trang web. Nếu bạn đang viết cho một số trang / trang web khác, đôi khi bạn có thể thử chạy nó để tìm đúng selectors.

Nếu bạn đã sử dụng chính xác mã giống như mã ở trên hoặc sử dụng một bộ chọn đúng trong mã tùy chỉnh của mình, bạn sẽ nhận được output kiểu như bên dưới:

[scrapy.core.engine] INFO: Spider opened
[scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
[scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
[scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.ebay.com/itm/Amazon-Echo-Dot-4th-Gen-With-Clock-2020-Smart-Speaker-Alexa-All-Colors-NEW/3632198
88368> (referer: None)
[scrapy.core.scraper] DEBUG: Scraped from <200 https://www.ebay.com/itm/Amazon-Echo-Dot-4th-Gen-With-Clock-2020-Smart-Speaker-Alexa-All-Colors-NEW/3632198
88368>
{'price': 'US $59.99'}
[scrapy.core.engine] INFO: Closing spider (finished)

Nếu bạn sử dụng selectors sai, bạn sẽ không thấy thông báo có chứa dòng DEBUG: Scraped from.

Tuy nhiên, nếu bạn không thấy bất kỳ thông báo nào trong số này, hãy kiểm tra xem output có chứa DEBUG: Crawled (200) hay không. Nếu không, Scrapy có thể đã không thể thu thập thông tin hoặc lấy được dữ liệu từ trang web. Có thể có nhiều lý do, vì vậy nhiều mẹo khắc phục sự cố:

  • Trước hết, hãy kiểm tra xem kết nối internet của bạn có hoạt động bình thường không.
  • Nếu có, hãy kiểm tra xem bạn có thể mở mã link1 trong trình duyệt web hay không.
  • Nếu không, đó là một liên kết sai: hãy thay đổi giá trị link1 trong mã của bạn.

Nếu vẫn chưa thành công, có thể có nhiều lý do:

  • Nếu bạn có thể nhận được dữ liệu hoặc phản hồi ít nhất một lần, có thể bạn đang thu thập dữ liệu hoặc quét trang quá nhiều lần trong một khoảng thời gian ngắn, khiến trang web chặn bạn. Trong trường hợp này, bạn có thể tăng khoảng thời gian giữa các lần thu thập thông tin hoặc lần chạy liên tiếp.
  • Nếu không, trang web mục tiêu có thể đang sử dụng một số công nghệ bảo vệ cấm việc cào trang web, công nghệ này đang chặn yêu cầu của bạn để quét trang bằng Scrapy. Trong trường hợp này, hãy dùng ScrapingBee

Sử dụng ScrapingBee

ScrapingBee là một dịch vụ thu thập dữ liệu web để sử dụng các công nghệ bảo vệ cạo và quét web mà không bị chặn. Nó cung cấp một API đơn giản để quét web bằng các trình duyệt thông qua proxy, cho phép bạn bỏ qua các công nghệ bảo vệ cào trang web bằng Scrapy.

Ví dụ, tôi đã bắt đầu thử nghiệm lấy dữ liệu eBay nhưng không thành công. eBay phát hiện và chặn tất cả các yêu cầu cho đến khi chúng đến từ người dùng thực sử dụng trình duyệt web thực và do đó, Scrapy không hoạt động đối với eBay.

Ngoài ra, bạn có thể thấy rằng các trang web lớn hoặc phổ biến hoạt động với Scrapy cho một số yêu cầu, nhưng sau đó, chúng cũng bắt đầu chặn các yêu cầu đó. Đó là lúc bạn cần dùng đến ScrapingBee.

ScrapingBee có bản dùng thử miễn phí bao gồm 1.000 lệnh miễn phí tới API của nó, cho phép bạn kiểm tra dịch vụ của nó hoặc làm việc trên một dự án scraping trang web nhỏ. Cách dùng API của ScrapingBee như sau:

ScrapingBee

  • Khi bạn xác nhận địa chỉ email của mình và đăng nhập vào ScrapingBee, bạn sẽ thấy trang tổng quan của nó cung cấp thông tin tài khoản của bạn và hơn thế nữa.

Cách tự cào một trang web tự động theo giờ định sẵn 9

  • Trong Request Builder, hãy nhập liên kết bạn muốn thu thập dưới URL. Nếu trang không yêu cầu JavaScript, hãy bỏ chọn JavaScript Rendering.

Cách tự cào một trang web tự động theo giờ định sẵn 10

  • Trong tab cURL, sao chép liên kết được viết giữa các dấu ngoặc kép (trong khi bỏ qua từ “curl”) và dán giá trị link1 vào mã trong mã. Vì vậy, link1 = ‘https://www.ebay… trở thành link1 = ‘https://app.scrap…
  • Bây giờ, tiếp tục từ Bước số 4 trong phần Sử dụng Scrapy.

Cách thiết lập tự động

Bạn đã hoàn thành việc xây dựng trình quét dữ liệu, tức là logic để quét dữ liệu. Nhưng nó sẽ không chạy đều đặn mà thay vào đó, bạn cần phải tự chạy nó theo cách thủ công, đó không phải là mục tiêu của hướng dẫn này.

Do đó, chúng ta hãy cố gắng tự động hóa bộ quét tùy chỉnh của mình để nó chạy tự động theo các khoảng thời gian đã lên lịch.

Trong các hệ điều hành Linux như Ubuntu và Linux Mint, bạn có thể sử dụng cronjob để chạy bộ quét định kỳ theo cách sau:

Bước 1: Mở terminal lên và chạy lệnh crontab -e để chỉnh sửa tệp cron của người dùng.

Bước 2: Nhập <CRON_SCHEDULE> cd <PROJECT_DIR> scrapy runspider try-one.py trong file cron và lưu nó để lên lịch công việc cron của bạn.

Trong đó:

  • CRON_SCHEDULE: Lịch biểu mặc định * * * * * có nghĩa là chạy nó mỗi phút. Hoặc 0 * * * *có nghĩa là chạy nó một lần mỗi giờ, hoặc 0 0 * * *có nghĩa là chạy nó một lần mỗi ngày.
  • PROJECT_DIR: Thư mục trong đó bạn đã tạo dự án Scrapy của mình.

Bây giờ, trình quét của bạn sẽ chạy định kỳ vào thời gian đã định bằng cách sử dụng cron trong hệ điều hành Linux. Nếu bạn đang sử dụng Windows 10, bạn có thể sử dụng Task Scheduler để lập lịch chạy tác vụ cạo của mình theo định kỳ.

Đó là tất cả về việc thu thập một trang web tự động bằng cách sử dụng nền tảng sẵn sàng sử dụng như Octoparse và một chương trình được xây dựng tùy chỉnh sử dụng Scrapy và ScrapingBee.

Written by Linh Nguyễn

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments