【问题标题】:Check if python urlopen has finished loading检查 python urlopen 是否已完成加载
【发布时间】:2012-04-03 10:16:46
【问题描述】:
我正在使用漂亮的汤写一个页面scraper,并且注意到它有时会尝试解析一个页面,即使它还没有完全加载。
我正在做的是这样的:
soup = BeautifulSoup(urllib.urlopen(page))
我对 Python 不是很好,但我认为一定有办法让我知道页面已完成加载,因此我可以开始抓取它。
我知道它不会等到它全部加载完毕的原因是,脚本在大多数情况下都可以工作,但有时会出错,说我在页面上寻找的元素不存在(还)
谁能帮我解决这个问题?
【问题讨论】:
标签:
python
screen-scraping
urllib
【解决方案1】:
尝试将所有内容读入字符串:
html = urllib.urlopen(page).read()
soup = BeautifulSoup(html)
虽然 BS 文档说传递打开的文件对象很好,但像这样尝试是个好主意。
如果它仍然失败,则意味着它根本与 BS 无关。在这种情况下,print html 以查看您收到的内容。也许这只是因为您在从您的 python 脚本或类似的东西访问它时没有登录到该站点。
【解决方案2】:
您尝试加载的页面中是否可能存在一些 JavaScript?这可能会阻止它完全加载 - 如果它只是一个普通的静态网页 .urlopen() 应该没问题...如果 JavaScript 确实是问题,您可以尝试使用 PyQt4 之类的方法来加载页面然后提取 HTML,或使用浏览器像 Selenium 或 Windmill。