2013-04-09 40 views
11

Tôi đang cạo một số trang web dường như có khả năng bảo vệ khá tốt chống lại nó. Cách duy nhất tôi có thể làm cho nó hoạt động là sử dụng Selenium để tải trang và sau đó loại bỏ các thứ từ đó.Chạy trình duyệt selen trên máy chủ (Flask/Python/Heroku)

Hiện tại, tính năng này hoạt động trên máy tính cục bộ của tôi (cửa sổ firefox mở và đóng khi tôi truy cập trang của mình và HTML được xử lý thêm trong tập lệnh của tôi). Tuy nhiên, tôi cần scraper của tôi để có thể truy cập trên web. Các scraper được nhúng trong một ứng dụng Flask trên Heroku. Có cách nào để làm cho trình duyệt Selenium hoạt động trên các máy chủ Heroku không? Hoặc có bất kỳ nhà cung cấp dịch vụ lưu trữ nào có thể hoạt động không?

Trả lời

11

Heroku, tuyệt vời như nó có, có một hạn chế lớn trong đó người ta không thể sử dụng phần mềm tùy chỉnh hoặc trong nhiều trường hợp, thư viện. Trong việc cung cấp một ngăn xếp dễ quản lý, được quản lý tập trung, được quản lý tập trung, Heroku sẽ chặn các máy chủ của họ xuống để ngăn việc sử dụng khác.

Điều này sẽ không có Xorg trên dyno Heroku. Thiếu Xorg và thiếu khả năng cài đặt phần mềm tùy chỉnh nghĩa là không có xvfb, và không có khả năng chạy trình duyệt mà selenium mong muốn tồn tại. Hơn nữa, trình duyệt thường không có sẵn. Bạn sẽ có may mắn hơn với một đám mây cung cấp như AWS, nơi bạn có thể cài đặt phần mềm tùy chỉnh, bao gồm firefox, xvfb (để giữ từ cần tất cả các chi phí Xorg), và tất nhiên phần còn lại của chồng cào của bạn. This answer giải thích cách thực hiện đúng cách.

1

Có các gói để tạo selen hoạt động trên heroku.

Thêm các gói bên dưới.

1) heroku buildpacks:add https://github.com/kevinsawicki/heroku-buildpack-xvfb-google-chrome/ 
2) heroku buildpacks:add https://github.com/heroku/heroku-buildpack-chromedriver 

Và đặt heroku stack thành cedar-14 như bên dưới, vì xvfb buildpack chỉ hoạt động với tuyết tùng-14.

heroku stack:set cedar-14 -a stocksdata 

Sau đó chọn vị trí chrome google như sau

options = ChromeOptions() 
options.binary_location = "/app/.apt/usr/bin/google-chrome-stable" 
driver = webdriver.Chrome(chrome_options=options) 
Các vấn đề liên quan