我有一个网站并解析社交媒体中的某些内容 或其他网站以使信息保持最新。如您所知 Instagram 不会 使用“ beatifulSoup Python解析器”或其他工具,可能是因为您必须登录,并且必须能够运行js ,否则将无法加载< / em>。它也会与其他人发生。
因此,我确实使用Google chrome控制台在客户端运行了一些js脚本,该脚本将数据保存在 localStorage 中,以后我会用到。
问题是有时我确实有低速的互联网,或者我必须在我的PC上运行此脚本,这需要很多时间。也许不多,但是每天都在做,这确实很成问题。
我想在服务器端完成这项工作,始终有很高的互联网速度,并且我可以用手机启动脚本 或曾经到过的地方,而我正在努力弄清楚如何实现。
我需要在服务器端运行js的浏览器,并且只需与客户端相同的所有内容即可。
大多数服务器没有图形界面,并且仅在终端机上返回 html代码。
但是,不仅apach或nginx,还有很多主机服务,java服务器以及越来越多的主机服务。据我所知,在Java上,您可以创建自己的浏览器, 因此这意味着可以在服务器上运行浏览器功能。
问题是,是否有任何我可以使用的现成的工具,或者可以编写这种功能,但是使用库和框架可以尽快地编写它,而不是花很多时间。因为我没有工作,所以要在服务器端创建浏览器,我只想能够运行一些js。
我使用php,js,python。仅限Java SE和客户端。 JavaEE具有许多库和大量功能。也许有人知道用哪种语言 我可以意识到这一点。任何框架,或者在linux上都是可能的,或者有可以作为客户端运行的主机服务器,我认为有些公司会雇用这类人员来自动完成工作。
我当时在考虑phantomjs或nodejs,但是我对他们是陌生的,我想我会花很多时间而没有结果。
任何建议,链接,意见,想法都会对我有很大帮助,谢谢!!!
Phantomjs确实可以使用,但是您不能使用Phantomjs登录,可能是因为它不保留cookie或会话数据,或者可能没有标题,因此与其使用Web scraper程序,不如在服务器上使用真实的浏览器< / p>
PhantomJS确实很不方便,不便或任何其他原因,为了测试您无法获取任何信息,它花费的时间太长,您无法仅运行js脚本。
page.evaluate(function() {
setTimeout(function(){ document.getElementById("login").click(); console.log("click initialized"); }, 1000);
});
setTimeout内部评估似乎不起作用,即使检查也要花费很多时间
page.evaluateJavascript(function() {
});
evaluateJavascript卡住了(它不会运行phantom.exit(0)),您必须重新启动cmd并转到cd并再次键入所有命令。
非常简单的操作会产生巨大的问题。我不知道为什么创建phantomjs,是仅用于捕获还是做一个非常简单的人员。甚至来自phantomjs的解析器也很糟糕。没有教程,没有使用。没有图形界面,评估中的脚本似乎无法正确运行js,很难识别和了解其内部工作方式。每当它返回一个空行或什么都没有时,您就没有任何访问权,任何信息。没有错误,什么都没有。它受欢迎吗,我不知道,我以前听说过phantomjs,似乎什么都没有,丑陋,没有用。
例如,我在考虑使用webDriver硒,因此无需在客户端上运行硒,在服务器上运行似乎有点昂贵。没有托管可以为您提供带有gui而不是ubuntu服务器的vds的主机,因为您需要浏览器。
我意识到没有解决办法
我有一个可以在js上运行的脚本,并且它具有多种功能,不仅可以解析,还可以分析用户数据,跟踪,取消关注,发布数据并运行并引发用户。问题是“如何在服务器上运行浏览器功能”,我只是想通过一次在服务器上启动100个帐户的程序来模拟浏览器,但这是不可能的。也许我会用“没有解决方案,您无法在服务器上运行浏览器”的解决方案来结束这个问题。 WebDriver的使用成本太高。没有任何程序,对于webDriver,您可以一次使用:例如Chrome,Firefox,Opera,Yandex以及所有这些,但它们也使用大量RAM,这在VDS服务器上太昂贵了。
答案 0 :(得分:1)
我认为您可以使用phantomjs,我用它来完成许多需要登录或js加载操作的蜘蛛程序。
您可以使用Phantomjs登录,并且可以设置cookie,会话数据和请求标头。您需要做的就是搜索方法,如下所示: phantomjs login Instagram
使用phantomjs时,最重要的是,每次要进行下一步时,都必须确保页面或相关元素已加载完毕。因为页面或js加载需要加快速度,所以有时您还需要发送额外的args来获取页面加载,否则,如果没有相关元素,您将无法开始下一步。
答案 1 :(得分:1)
您无需登录即可删除Instagram。与JS一起使用时,我使用了requests_html包为您完成这项工作。您可以从instagram_scraper(https://github.com/meetmangukiya/instagram-scraper)开始,这是受request和request_html的作者Kenneth Reitz的twitter-scraper(https://github.com/kennethreitz/twitter-scraper)的启发。主要思想是在没有令牌或登录名的情况下进行抓取
两个脚本都启发了我创建一个不需要登录的抓取程序。至少是一个很好的起点。
更新于2018-09-22:我遵循Setting up a Digital Ocean server for Selenium, Chrome, and Python,但在我自己的服务器上。诀窍是创建假显示器:从乔纳森那里看到,在服务器上运行:)
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(chrome_options=options)
driver.get('http://nytimes.com')
print(driver.title)