2013-11-25 6 views
0

Я использую рамки суп Beauitful, чтобы извлечь ссылку (HREF из приведенного ниже содержания HTML)Python HTML парсинг с помощью BeautifulSoup рамки

  <div class="store"> 
       <label>Store</label> 
       <span> 
        <a title="Open in Google Play" href="https://play.google.com/store/apps/details?id=com.opera.mini.android" target="_blank"> 
         <!-- ><span class="ui-icon app-store-gp"></span> --> 
         Google Play 
        </a><i class="icon-external-link"></i> 
       </span> 
      </div> 

Я использовал следующий код, чтобы получить это в Python:

pageFile = urllib.urlopen("appannie.com/apps/google-play/app/com.opera.mini.android") 
pageHtml = pageFile.read() 
pageFile.close() 
print pageHtml 
soup = BeautifulSoup("".join(pageHtml)) 
item = soup.find("a", {"title":"Open in Google Play"}) 

print item 

Я получаю NoneType в качестве вывода. Любая помощь будет действительно велика.

я распечатал страницу HTML и вывод был следующим:

<html> 
    <head><title>503 Service Temporarily Unavailable</title></head> 
    <body bgcolor="white"> 
    <center><h1>503 Service Temporarily Unavailable</h1></center> 
    <hr><center>nginx</center> 
    </body> 
    </html> 

Он отлично работает в браузере

+1

«503 сервис временно недоступен» Так что это не проблема BeautifulSoup, а серверная ... вы уверены, что правильно запрашиваете страницу? Попробуйте установить общий пользовательский агент, например, ваш браузер, и посмотрите, все ли это делает. –

ответ

3
item = soup.find("a", {"title":"Open in Google Play"}) 

Вы изначально ищущий «пролет» с заголовком " Открыть в Google Play ", однако элемент, который вы ищете, является« a »(ссылка).

Edit: так как оказывается, что сервер возвращает ошибку 503, попробуйте установить общий агент пользователя с этим кодом (не проверял, он не может работать на всех, вы должны будете import urllib2):

soup = BeautifulSoup(urllib2.urlopen(urllib2.Request(sampleURL, None, {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0"})).read()) 
item = soup.find("a", {"title":"Open in Google Play"}) 
print item 

Также я удалил бесполезный "".join(pageHtml), так как urllib2 уже возвращает строки, поэтому нет необходимости в соединении.

+0

http://www.appannie.com/apps/google-play/app/com.opera.mini.android/ Я тоже пытался использовать это. Кажется, это не помогает. Все еще получаю NoneType –

+1

Я пробовал код, как указано выше, и получил положительные результаты. – hyleaus

+0

@hyleaus Я отредактировал код к тому, который использовал. Ссылка открывается в браузере. –

Смежные вопросы