检查python urlopen是否已完成加载

时间:2012-03-18 19:29:57

标签: python screen-scraping urllib

我正在使用漂亮的汤写一个页面刮板,并注意到它有时会尝试解析页面,即使它没有完全加载。

我正在做的是这样的事情:

soup = BeautifulSoup(urllib.urlopen(page))

我对Python不是很了解,但我认为必须有一种方法让我知道页面已经完成加载,所以我可以开始废弃它。

我之所以知道它没有等到它全部加载,是因为脚本大部分时间都会工作,但是会在其他时候出错,说我在页面上寻找的元素不存在(但是)

有人能帮我一把吗?

2 个答案:

答案 0 :(得分:2)

您尝试加载的页面中是否有可能存在JavaScript?这可能会阻止它完全加载 - 如果它只是一个普通的静态网页.urlopen()应该做得很好......如果JavaScript确实是问题你可以尝试像PyQt4一样加载页面然后提取HTML,或者使用像Selenium或Windmill这样的浏览器。

答案 1 :(得分:2)

尝试将所有内容都读成字符串:

html = urllib.urlopen(page).read()
soup = BeautifulSoup(html)

虽然BS文档说传递一个打开的文件对象很好,但尝试这样做是个好主意。 如果它仍然失败,则意味着它根本与BS无关。在这种情况下,print html可以看到您收到的内容。也许只是因为你从python脚本或类似的东西访问它时没有登录到网站。