用Python自动与网页交互

4 投票
5 回答
9821 浏览
提问于 2025-04-15 16:38

我想要自动化与网页的互动。到目前为止,我一直在使用pycurl,但最终网页会使用javascript,所以我在寻找其他的选择。一个典型的互动过程是“打开网页,搜索一些文本,点击一个链接(这个链接会打开一个表单),填写表单并提交”。

我们是在Google App Engine上部署的,如果这有影响的话。

补充说明:我们是在appengine上部署网页的。但是互动是在另一台机器上进行的。所以selenium似乎是最好的选择。

5 个回答

1

你试过用QtWebKit和PyQt吗?这样你可以在Python中加载一个特定的网址,并读取里面的内容。然后你可以搜索网址,再用Webkit去访问它。我觉得这些都可以通过一些基本的Django(假设你在GAE上使用Django)视图测试来完成,这样可以测试响应代码。如果你想用图形界面来做,这里有一段QtWebKit和PyQt的示例代码,可以帮助你入门:

import sys
import time

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)

web = QWebView()

settings = web.settings()
settings.setAttribute(QWebSettings.PluginsEnabled, True)
settings.setAttribute(QWebSettings.JavaEnabled, True)
settings.setAttribute(QWebSettings.JavascriptCanOpenWindows, True)
settings.setAttribute(QWebSettings.JavascriptCanAccessClipboard, True)
settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
settings.setAttribute(QWebSettings.ZoomTextOnly, True)



settings.setOfflineStoragePath('.')
settings.setIconDatabasePath (".")

url = 'http://stackoverflow.com'

web.load(QUrl(url))

web.show()

sys.exit(app.exec_())
6

Twill 和 mechanize 这两个工具不支持 JavaScript,而 Qt 和 Selenium 也不能在 App Engine 上运行,因为 App Engine 只支持纯 Python 代码。我不知道有没有纯 Python 的 JavaScript 解释器,如果想在 App Engine 上部署一个支持 JS 的抓取工具,你就需要这个东西:-(。

也许在 Java 里有一些东西可以用,这样至少可以让你在 Java 版本的 App Engine 上部署?Java 和 Python 的 App Engine 应用版本可以使用同一个数据存储,所以你可以把应用的一部分留在 Python 中……只是不能处理需要理解 JavaScript 的那部分。不幸的是,我对 Java 和 App Engine 的环境了解不够,无法推荐具体的包来尝试。

((1)): 为了澄清一下,因为似乎有些误解导致我被投了反对票:如果你在另一台电脑上运行 Selenium 或其他抓取工具,当然可以针对部署在 App Engine 上的网站进行抓取(目标网站的部署方式、使用的编程语言等都无所谓,只要是你能访问的网站 [[真实网站:flash 等可能会有所不同]])。我理解问题的意思是,提问者想要的是让抓取功能作为 App Engine 应用的一部分运行——这才是问题所在,而不是你(或其他人;-))运行被抓取的网站!

4

那Selenium怎么样呢?(http://seleniumhq.org

撰写回答