7

我正在使用模块'mechanize'在python中编写屏幕刮板脚本,我想在href中有javascript:__doPostBack的链接上使用mechanize.click_link()方法。我相信我试图解析的页面正在使用 AJAX。

注意:mech 是 mechanize.Browser()

>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False

单击链接后,我想检索页面源。

4

3 回答 3

10

我不使用机械化,但我用python做了很多网络抓取。

当我遇到像 __doPostBack 这样的 javascript 函数时,我会执行以下操作:
我在 Firefox 中访问该网站,并使用HttpFox扩展程序查看浏览器在单击相关链接时发送到 Web 服务器的 POST 请求的参数。
然后我使用 urllib.parse.urlencode 在 python 中构建相同的请求来构建我需要的查询字符串和 POST 数据。
有时网站也使用 cookie,所以我只使用 python 的 http.cookiejar。

我已经成功使用过这种技术好几次了。

于 2011-03-01T17:00:16.743 回答
1

我认为不mechanize支持 Javascript;要抓取本质上依赖 Javascript 执行来实现其功能的页面,您可能需要使用不同的工具,例如Selenium RC

于 2009-09-13T17:56:07.707 回答
0
>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False
于 2009-10-12T09:51:26.703 回答