使用beautifulsoup和mechanize获取ajax调用结果

4 投票
2 回答
6580 浏览
提问于 2025-04-15 21:26

你好,我正在用Python 2.5和BeautifulSoup构建一个网页抓取工具,但我遇到了一个问题……网页的一部分是在用户点击某个按钮后生成的,这个按钮会通过调用特定的JavaScript函数并使用合适的参数来启动一个Ajax请求。

有没有办法模拟用户的操作,获取这个结果呢?我看到有一个叫mechanize的模块,但我觉得这个模块主要是用来处理表单的……

如果有相关的链接或者代码示例,我会非常感激。谢谢!

2 个回答

3

不,这个事情做起来不太简单。根据我所知道的,你有几个选择,最简单的在前面:

  1. 自己去看一下AJAX的JavaScript代码,作为一个人类程序员,理解它,然后手动写Python代码来模拟这些AJAX请求。你也可以使用一些抓包软件,实时捕捉请求和响应,然后尝试用代码重现它们;
  2. 使用selenium或者其他一些浏览器自动化工具,在真实的网页浏览器上获取页面;
  3. 使用一些Python的JavaScript运行工具,比如spidermonkey或者pyv8来运行JavaScript代码,并把它连接到你自己的HTML文档对象模型(DOM)上;
6

好的,我搞明白了……其实很简单,后来我意识到可以结合使用urllib、urllib2和BeautifulSoup这几个工具。

import urllib, urllib2
from BeautifulSoup import BeautifulSoup as bs_parse

data = urllib.urlencode(values)
req  = urllib2.Request(url, data)
res  = urllib2.urlopen(req)
page = bs_parse(res.read())

撰写回答