如何用Python解析通过JavaScript加载的网页.html?

0 投票
2 回答
882 浏览
提问于 2025-04-16 03:41

我正在用Python来解析一个拍卖网站。

如果我用浏览器打开这个网站,它会先显示一个加载页面,然后自动跳转到搜索结果页面。

但是如果我用urllib2来打开这个网页,read()方法只会返回加载页面。

有没有什么Python库可以等到所有内容加载完毕后,再用read()方法返回所有结果呢?

谢谢。

2 个回答

0

在查看这个拍卖网站的源代码时,我发现它使用了.php来创建加载页面,并且会跳转到结果页面。反向工程去找真正的链接不太奏效,因为加载页面和结果页面的链接是一样的。

还有,@Manoj Govindan,我试过使用Mechanize,但即使我加上了

br.set_handle_refresh(True)
br.set_handle_redirect(True)

它还是只读取加载页面。

经过几个小时在网上的搜索,我找到一个可能的解决办法:使用pywin32

import win32com.client
import time

url = 'http://search.ruten.com.tw/search/s000.php?searchfrom=headbar&k=halo+reach'
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 0
ie.Navigate(url)

while 1:
  state = ie.ReadyState
  if state == 4:
    break
    time.sleep(1)

print ie.Document.body.innerHTML

不过这个方法只在win32平台上有效,我在寻找一个跨平台的解决方案。

如果有人知道怎么解决这个问题,请告诉我。

0

搜索页面是怎么工作的呢?如果它用Ajax加载了什么内容,你可以通过一些简单的逆向工程来找出相关的链接。你可以使用Firebug的网络面板或者Wireshark工具来查看这些链接,然后用urllib2来加载它们。

如果事情比这更复杂,你可以手动模拟JavaScript执行的操作,而不需要加载和解析JavaScript。这一切都取决于搜索页面的具体工作方式。

最后,我知道有一些方法可以在没有浏览器的情况下运行脚本,因为一些功能测试工具就是这么做的,但我猜这可能是最复杂的方法。

撰写回答