Проверьте, закончилась ли загрузка python urlopen - PullRequest
1 голос
/ 18 марта 2012

Я пишу скребок для страниц, используя красивый суп, и заметил, что иногда он пытается проанализировать страницу, даже если она не загружена полностью.

То, что я делаю, выглядит примерно так:

soup = BeautifulSoup(urllib.urlopen(page))

Я не очень хорошо разбираюсь в Python, но я думаю, что у меня должен быть способ узнать, что страница закончила загрузку, поэтому я могу начать ее удалять.

Причина, по которой я знаю, что он не ждет, пока все будет загружено, заключается в том, что сценарий будет работать большую часть времени, но в некоторых других случаях произойдет ошибка, сказав, что искомого элемента на странице нет )

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

2 голосов
/ 18 марта 2012

Попробуйте прочитать все в строку:

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

В то время как документы BS говорят, что передача объекта открытого файла - это хорошо, пробовать это так - хорошая идея. Если это все еще терпит неудачу, это означает, что это не связано с BS вообще. В этом случае print html, чтобы увидеть, что вы получите. Может быть, это потому, что вы не вошли на сайт при доступе к нему из скрипта Python или чего-то подобного.

2 голосов
/ 18 марта 2012

Возможно, на странице, которую вы пытаетесь загрузить, есть какой-то JavaScript?Это может помешать полной загрузке - если это просто статическая веб-страница, .urlopen() должна работать нормально ... если проблема действительно в JavaScript, вы можете попробовать что-то вроде PyQt4, чтобы загрузить страницу и затем извлечь HTML, или использовать браузер.как селен или ветряная мельница.

...