Một project nho nhỏ về Web Scraping

Tram Ho

Hey yoo,chào mọi người,trong bài viết này mình sẽ nói về cách xây dựng một project Web Scraping nho nhỏ và chạy thử code demo.

Các bạn có thể xem hai bài viết trước của mình để hiểu thêm về Scrapy.

Bài viết 1
Bài viết 2

Chọn trang web

Trong bài viết này mình sẽ dùng trang Web https://9to5mac.com/ để làm demo.Mình sẽ lấy hết các bài báo trên trang web này.

Phân tích trang web

Trước khi bắt đầu thì chúng ta phải biết xem trang web thuộc loại render gì ?

Có 2 kiểu render thường thấy đó là render ra HTML và render ra JSON.

Mình đã thử vào tab network và thấy ……

Oh trang web này render ra JSON ,vậy là dễ rồi …

Khởi tạo project

MÌnh khởi tạo project bằng các lệnh

Trong class MacSpider chuyển start_urls thành start_urls = ['https://9to5mac.com/?infinity=scrolling']

Chúng ta cấu hình cho thuộc tính của class MacSpider như sau :

Viết code cho Spider

Thêm Class Request để thực hiện http Request để lấy data.

Method start_requests luôn chạy đầu tiên khi chạy Spider. Do trang web này là infinite scroll page nên mình để page là 10,thực tế mình đã test nó có hơn 1000 trang.

Mình dùng phương thức POST với formdata là index của trang và sẽ gọi hàm callback chứa response là kết quả trả về sau khi thực hiện HTTP request.

Sau mỗi request mình sẽ parse cái response từ dạng text thành json bằng cách :

Response sau khi Scrape về có dạng như sau ,mình thử với Postman:

Nhận thấy response dạng Json này còn thiếu data ở mỗi Item,data này có thể lấy theo field permalink chứa trong response nên mình tiếp tục request để lấy lượng data còn lại.

Kết quả trả về như hình

Lượng data còn thiếu của mỗi Item mình sẽ merge với Item đó .

Viết code cho pipelines

Mỗi Item trả về sẽ đi qua pipeline mà mình config trong file pipelines,pipeline sẽ khởi tạo và lưu response vào một file JSON.

Run code

Chạy code với câu lệnh :

Chúng ta chạy code và … tada… được kết quả như hình.

Kết luận

Trên đây mình đã demo một project nho nhỏ về Scrape data,hi vọng mọi người thích.Nếu thích hãy cho mình một click up nhé,cảm ơn ❤️

Source code : https://github.com/KaynAssassin/ninetofivemac

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo