2013-04-09 15 views
11

Ich kratze einige Websites, die scheinen, ziemlich guten Schutz dagegen zu haben. Der einzige Weg, um es zum Laufen zu bringen, ist Selenium zu benutzen, um die Seite zu laden und dann etwas davon zu kratzen.Running Selen Browser auf dem Server (Flask/Python/Heroku)

Momentan funktioniert das auf meinem lokalen Computer (ein Firefox-Fenster öffnet und schließt, wenn ich auf meine Seite zugreife und es wird HTML in meinem Skript weiterverarbeitet). Ich benötige jedoch, dass mein Schaber im Internet zugänglich ist. Der Schaber ist in eine Flask App auf Heroku eingebettet. Gibt es eine Möglichkeit, den Selenium-Browser auf Heroku-Servern laufen zu lassen? Oder gibt es Hosting-Provider, bei denen es funktionieren kann?

Antwort

11

Heroku, wunderbar wie es ist, hat eine große Einschränkung darin, dass man nicht benutzerdefinierte Software oder in vielen Fällen Bibliotheken verwenden kann. Bei der Bereitstellung eines einfach zu bedienenden, zentral gesteuerten und verwalteten Stacks streift Heroku seine Server ab, um eine anderweitige Nutzung zu verhindern.

Worauf das hinausläuft ist, dass es kein Xorg auf einem Heroku-Prüfstand gibt. Der Mangel an Xorg und die mangelnde Fähigkeit, benutzerdefinierte Software zu installieren, bedeutet auch, dass keine xvfb vorhanden ist und der Browser nicht ausgeführt werden kann, von dem Selen erwartet. Außerdem ist der Browser nicht allgemein verfügbar.

Sie haben mehr Glück mit einem Cloud-Angebot wie AWS, wo Sie benutzerdefinierte Software installieren können, einschließlich Firefox, xvfb (damit Sie nicht alle Xorg-Overhead benötigen) und natürlich den Rest Ihres Scraping-Stacks. This answer erklärt, wie man es richtig macht.

1

Es gibt Buildpacks, um Selen an Heroku arbeiten zu lassen.

Fügen Sie unten Buildpacks hinzu.

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

Und gesetzt Heroku auf Zeder-14-Stack, wie unten dargestellt, als xvfb buildpack nur mit Zeder-14 arbeitet.

heroku stack:set cedar-14 -a stocksdata 

zeigen Sie dann die Google Chrom Lage, wie unten

options = ChromeOptions() 
options.binary_location = "/app/.apt/usr/bin/google-chrome-stable" 
driver = webdriver.Chrome(chrome_options=options) 
Verwandte Themen