在命令行运行HtmlUnit与Jython - 启动问题
我按照这个教程尝试用 Jython 运行 HtmlUnit:
http://blog.databigbang.com/web-scraping-ajax-and-javascript-sites/
但是对我来说不太管用。我无法导入 com.gargoylesoftvare 这个包,HtmlUnit 文件夹里只有一些 HTML 文件,我需要以某种方式导入它们。
教程里说要这样运行 Python 脚本:
/opt/jython/jython -J-classpath "htmlunit-2.8/lib/*" gartner.py
然后我尝试运行:
java -jar /Users/adam/jython/jython.jar -J-classpath "htmlunit-2.8/lib/*" gartner.py
我的问题是我收到了一个“未知选项:J-classpath”的错误。但是在 Jython.org 上根本没有提到 -J-classpath 这个参数。我会非常感激任何建议。我是在 Snow Leopard 上运行独立版的 jython 2.5.2。
3 个回答
我之前也遇到过这样的错误,按照以下步骤我成功解决了它。
- 首先,下载 jython,然后运行
java -jar python-installer-xxx.jar
来安装 jython。安装完成后,把jython/bin
文件夹添加到你的系统路径中。接着,在命令行中输入jython
来确认它是否正常工作。 - 接下来,去 sourceforge 下载 htmlunit 的 jar 文件,并记得指定它们的位置。
然后,写好你的 .py 文件并运行
jython -J-classpath "/Users/crabime/Development Folder/htmlunit-2.23/lib/*" /Users/crabime/PycharmProjects/scrapimage/crabime/gartner.py
这样一切就应该没问题了。如果你还是遇到“找不到模块”的错误,可能是你输入的命令有误,检查一下吧。
你可以通过命令 jython myscript.py 来运行一个 Jython 脚本,但前提是这个脚本需要把它运行所需的 jar 文件的完整网址添加到 Python 的路径中,这个操作是通过 sys.path.append 来实现的。
下面是我正在处理的一个脚本。
#!/opt/jython/jython
'''
Created on Dec 7, 2011
@author: chris
'''
import sys, os
from time import sleep
jarpath = '/usr/share/java/htmlunit/' #path the jar files to import
jars = ['apache-mime4j-0.6.jar','commons-codec-1.4.jar',
'commons-collections-3.2.1.jar','commons-io-1.4.jar',
'commons-lang-2.4.jar','commons-logging-1.1.1.jar',
'cssparser-0.9.5.jar','htmlunit-2.8.jar',
'htmlunit-core-js-2.8.jar','httpclient-4.0.1.jar',
'httpcore-4.0.1.jar','httpmime-4.0.1.jar',
'nekohtml-1.9.14.jar','sac-1.3.jar',
'serializer-2.7.1.jar','xalan-2.7.1.jar',
'xercesImpl-2.9.1.jar','xml-apis-1.3.04.jar'] #a list of jars
def loadjars(): #appends jars to jython path
for jar in jars:
print(jarpath+jar+'\n')
container = jarpath+jar
sys.path.append(container)
loadjars()
import com.gargoylesoftware.htmlunit.WebClient as WebClient
webclient = WebClient()
def gotopage():
print('hello, I will visit Google')
url = 'http://google.com'
page = webclient.getPage(url)
print(page)
if __name__ == "__main__":
gotopage()
你的整个命令行都是由 java
命令来处理的(这本来就是应该这样),而 -J-classpath 确实不是 java
命令的有效选项。你真的应该尽量按照教程的步骤来做,因为你漏掉了几个重要的步骤(而且有点在自己随意加步骤)。