Tôi đang làm việc để thu thập dữ liệu các trang, tuy nhiên, tôi không thể xử lý các trang bằng javascript. Mọi người đề nghị tôi sử dụng htmlunit, vì vậy tôi đã cài đặt nó, nhưng tôi không biết làm thế nào để sử dụng nó ở all.Dose bất cứ ai có thể cho một ví dụ (scrapy + htmlunit) cho tôi? Cảm ơn rất nhiều.Làm cách nào để kết hợp các mẩu tin lưu niệm và htmlunit để thu thập thông tin url bằng javascript
Làm cách nào để kết hợp các mẩu tin lưu niệm và htmlunit để thu thập thông tin url bằng javascript
Trả lời
Để xử lý các trang bằng javascript, bạn có thể sử dụng Webkit hoặc Selenium.
Dưới đây một số đoạn từ snippets.scrapy.org:
Cảm ơn rất nhiều, chúng có thể hữu ích cho tôi. – HjySix
Dưới đây là một ví dụ làm việc sử dụng selen và phantomjs webdriver không đầu trong một middleware tải xử lý.
class JsDownload(object):
@check_spider_middleware
def process_request(self, request, spider):
driver = webdriver.PhantomJS(executable_path='D:\phantomjs.exe')
driver.get(request.url)
return HtmlResponse(request.url, encoding='utf-8', body=driver.page_source.encode('utf-8'))
Tôi muốn khả năng nói nhện khác nhau mà middleware để sử dụng vì vậy tôi thực hiện wrapper này:
def check_spider_middleware(method):
@functools.wraps(method)
def wrapper(self, request, spider):
msg = '%%s %s middleware step' % (self.__class__.__name__,)
if self.__class__ in spider.middleware:
spider.log(msg % 'executing', level=log.DEBUG)
return method(self, request, spider)
else:
spider.log(msg % 'skipping', level=log.DEBUG)
return None
return wrapper
settings.py:
DOWNLOADER_MIDDLEWARES = {'MyProj.middleware.MiddleWareModule.MiddleWareClass': 500}
cho wrapper để làm việc tất cả các nhện phải có tối thiểu:
middleware = set([])
để bao gồm phần mềm trung gian:
middleware = set([MyProj.middleware.ModuleName.ClassName])
Ưu điểm chính để thực hiện theo cách này chứ không phải trong nhện là bạn chỉ thực hiện một yêu cầu. Trong giải pháp tại liên kết thứ hai của reclosedev chẳng hạn: Trình xử lý tải xuống xử lý yêu cầu và sau đó đưa ra phản hồi cho nhện. Con nhện sau đó đưa ra một yêu cầu hoàn toàn mới trong hàm parse_page của nó - Đó là hai yêu cầu cho cùng một nội dung.
Ví dụ khác: https://github.com/scrapinghub/scrapyjs
Chúc mừng!
- 1. cách lấy start_url ban đầu bằng mẩu tin lưu niệm (trước khi chuyển hướng)
- 2. Cách sử dụng đúng Quy tắc, hạn chế_xpath để thu thập dữ liệu và phân tích cú pháp các URL có nhiều mẩu tin lưu niệm?
- 3. Thu thập thông tin Internet
- 4. Làm cách nào để thử lại liên kết 404 không tìm thấy trong mẩu tin lưu niệm?
- 5. Tôi làm cách nào để sử dụng Scrapy để thu thập thông tin trong các trang?
- 6. Phát triển trình thu thập thông tin và trình thu thập thông tin cho công cụ tìm kiếm dọc
- 7. Làm cách nào để cung cấp URL cho việc thu thập dữ liệu để thu thập dữ liệu?
- 8. Cách tạo start_urls động trong thu thập thông tin?
- 9. Cách thu thập thông tin tương tự như panopticlick.eff.org
- 10. Thu thập thông tin hệ thống và môi trường
- 11. Làm cách nào để thiết kế bot thu thập thông tin?
- 12. Thư viện trình thu thập thông tin web Java
- 13. Làm thế nào để mở rộng Nutch cho bài viết thu thập thông tin
- 14. Thu thập thông tin không chính xác CrawlSpider không thu thập thông tin trang đích đầu tiên
- 15. thu thập dữ liệu trang web động bằng htmlunit
- 16. Thu thập thông tin cửa hàng Google Play
- 17. Làm cách nào để xóa truy vấn khỏi url?
- 18. Làm GWT ứng dụng thu thập thông tin bằng công cụ tìm kiếm
- 19. cách thu thập thông tin hệ thống trong osx bằng cách sử dụng mục tiêu c
- 20. Tăng thu thập thông tin/lập chỉ mục của Google?
- 21. Các trang web AJAX có thể thu thập thông tin bằng công cụ tìm kiếm không?
- 22. Trình thu thập thông tin web - Bỏ qua tệp Robots.txt?
- 23. Nutch không thu thập thông tin tất cả các liên kết dưới dạng
- 24. Lưu hình ảnh từ url bằng HTMLUnit
- 25. Grails: cách thu thập tất cả các tin nhắn
- 26. Asp.net Request.Browser.Crawler - Danh sách trình thu thập thông tin động?
- 27. Trình thu thập thông tin web trong ruby
- 28. Làm cách nào để thu thập toàn bộ Wikipedia?
- 29. Tôi làm cách nào để xử lý Javascript trong trình thu thập dữ liệu web Perl?
- 30. Làm cách nào để thu thập thông tin nhập chính trong ứng dụng Cocoa kiểu trò chơi điện tử?
Phế liệu dựa trên Python, cho đến khi Htmlunit dựa trên Java. Phế liệu có thể xử lý Javascript làm việc với splash, xem https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash/ – siomes