Không thể lấy dữ liệu từ shopee bằng scrapy

Em mới đang tập học cách crawl dữ liệu từ một trang web bằng scrapy, nhưng khi thử với trang shopee thì không lấy được gì.
Ví dụ:
Em thử trên shell với câu lệnh response.css("div._3oKqLJ.uqouNy ::text").get() để lấy dòng chữ “Freeship Xtra” có html như trong hình nhưng nó không lấy được cái gì cả. Tương tự với các chữ khác trên trang này.


Mọi người có thể cho em biết tại sao và cách giải quyết được không ạ. :smile:

1 Like

Khi tải file HTML xuống, nó không chứa toàn bộ giao diện, DOM element mà em thấy mà lại render thông qua code Javascript. Thực chất đây là một cơ chế để chặn crawler. Muốn lấy dữ liệu từ mấy trang chặn crawler kiểu này chỉ có cách là dùng thư viện điều khiển headless browser (thường là Chronium). Trên Python em có thể thử tìm hiểu về Selenium

7 Likes

Dùng webdriver bạn nhé như mình đã áp dụng trong cái này nè Puppeteer Webdriver

2 Likes

Chủ thớt đang dùng Python mà :thinking: ? Puppeteer chỉ có trên Node.js thôi.

2 Likes

Có gắn thẻ #python đấy.

4 Likes

Thế python có thằng https://selenium-python.readthedocs.io/ đó bạn

2 Likes

Mình chưa crawl từ Shopee bao giờ (với cũng chưa có thời gian coi kỹ cái hình của bạn), nhưng mình có 1 số kinh nghiệm thế này:

#1. Nếu bạn đang học, thì tìm những trang “thường” thôi, cho dễ crawl. Những site lớn họ thường có thủ thuật này nọ để chống crawl (mình không biết shopee có làm vụ này không). Tất nhiên là vẫn crawl được, nhưng không phù hợp cho việc học.

#2. Mới học thì Beautiful Soup chắc sẽ dễ hơn (tại mình xài thấy dễ)

#3. Luyện cái xpath cho thiệt nhiều. Lúc mình mới tìm hiểu, đa phần không crawl được là do ngu cái xpath này

#4. Hoc thêm Regex sẽ giúp cuộc sống khi hoc crawl của bạn dễ dàng hơn.

#5. Đọc hiểu cách hàm find/search/match, coi nó dùng khi nào, return ra cái gì

#6. Có chút kiến thức về HTML/CSS sẽ rất có ích.

#7. Nên bắt đầu với việc đơn giản là gửi request lên để lấy content HTML về và xử lý trước. Rồi từ từ hãy lên selenium, headless browser…

7 Likes


Theo 1 số tutorial trên mạng là đc còn muốn học từ a đến z tổng hợp thì đọc cuốn này.
https://www.amazon.com/Web-Scraping-Python-Collecting-Modern/dp/1491985577

6 Likes

Nếu tắt js đi mà shoppee ko render ra được cái “Freeship Xtra” đó có nghĩa là scrapy sẽ không work vì web dùng js render phần html đó.
Phải thông qua 1 cái headless browser như là splash để nó render ra html.

4 Likes

Có cách nhanh hơn là vào Shoppe, nhấn chuột phải, chọn Xem nguồn trang - View page source, phím tắt là CtrlI, tab mới hiện ra rồi thử tìm “Freeship Xtra” là xong. Mà mình tìm rồi, không có đâu :penguin:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?