Scrapy Shell
Scrapy đi với một shell tích hợp cái giúp bạn thử và debug scraping code của bạn trong thời gian thực. Bạn có thể
nhanh chóng test XPath expressions / CSS selectors của bạn với nó. Nó sẽ là rất hay để viết các web scrapers của
bạn và tôi luôn sử dụng nó!
Bạn có thể cấu hình Scrapy Shell để sử dụng console khác thay vì console Python mặc định như IPython. Bạn sẽ nhận
tự động hoàn thành và các thứ tốt khác như đầu ra có màu.
Để sử dụng nó trong Scrapy Shell, bạn cần thêm dòng này vào scrapy.cfg file của bạn:
shell = ipython
Một khi nó được cấu hình, bạn có thể bắt đầu sử dụng Scrapy Shell:
$ scrapy shell –nolog
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x108147eb8>
[s] item {}
[s] settings <scrapy.settings.Settings object at 0x108d10978>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request and update local objects
[s] shelp() Shell help (print this help)
[s] view(response) View response in a browser
In [1]:
Chúng ta có thể bắt đầu lấy một URL bằng cách đơn giản chạy lệnh sau:
fetch(‘https://clever-lichterman-044f16.netlify.app/products/taba-cream.1/’)
Cái này sẽ bắt đầu bằng cách lấy /robots.txt file.
[scrapy.core.engine] DEBUG: Crawled (404) <GET https://clever-lichterman-044f16.netlify.app/robots.txt> (referer: None)
Trong trường hợp này, không có bất cứ robot.txt, đó là tại sao chúng ta nhận một 404 HTTP code. Nếu có một robot.txt,
Scrapy sẽ theo mặc định đi theo tập quy tắc của nó. Bạn có thể không làm hoạt động hành vi này bằng cách thay đổi
ROBOTSTXT_OBEY trong product_scraper/settings.py:
ROBOTSTXT_OBEY = False
Chạy lời gọi fetch của chúng ta một lần nữa, bạn bây giờ có một ghi lại giống cái này:
[scrapy.core.engine] DEBUG: Crawled (200) <GET https://clever-lichterman-044f16.netlify.app/products/taba-cream.1/> (referer: None)
Scrapy sẽ lưu trả lời thẳng vào biến response, cái bạn có thể trực tiếp đánh giá trong Scrapy Shell.
Ví dụ, chơi với các lệnh sau để nhận nhiều hơn cái nhìn bên trong vào status code của trả lời và các headers của
nó.
>>> response.status
200>> response.headers
{b’Content-Length’: [b’3952′], b’Age’: [b’100′], b’Cache-Control’: [b’public, max-age=0, must-revalidate’], b’Content-Type’: [b’text/html; charset=UTF-8′], b’Etag’: [b'”24912a02a23e2dcc54a7013e6cd7f48b-ssl-df”‘], b’Server’: [b’Netlify’], b’Strict-Transport-Security’: [b’max-age=31536000; includeSubDomains; preload’], b’Vary’: [b’Accept-Encoding’]}
Ngoài ra, Scrapy cũng lưu body trả lời thẳng vào thư mục hệ thống tạm thời của bạn, từ đó bạn có thể xem nó trực
tiếp trong trình duyệt của bạn với
view(response)
Chú ý, cái này sẽ có thể không duyệt lí tưởng, khi trình duyệt của bạn sẽ chỉ load HTML, mà không có các
dependencies tài nguyên bên ngoài của nó hay xem xét các vấn đề CORS.
Scrapy Shell là giống một Python shell thông thường, nên đừng do dự chạy các scripts/hàm ưa thích của bạn trong
nó.
