2012-03-18 55 views
1

我正在写一个页面scrapper使用美丽的汤,并注意到它有时会尝试解析一个页面,即使它尚未完全加载。检查蟒蛇urlopen是否已完成加载

我在做什么是这样的:

soup = BeautifulSoup(urllib.urlopen(page)) 

我不是很好的与Python,但我想一定是我知道该页面已完成加载的方式,所以我可以开始报废它。

之所以我知道它并没有等到它全部加载,是因为脚本将在大多数情况下都能正常工作,但会在其他时间出错,说我在页面上查找的元素不存在(然而)

任何人都可以帮我一个这个吗?

回答

2

尝试阅读一切都变成字符串:

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

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

1

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