2016-12-19 4 views
1

私はPython 3を使用していますが、私は次のように簡単にウェブサイトのコンテンツをダウンロードしようとしている:私は取得していますウェブ:美しいスープ:BS4:<h1>エラー200 OK</h1>

# IMPORTS -------------------------------------------------------------------- 
import urllib.request 
from bs4 import BeautifulSoup as bs 

# CLASS DESC ----------------------------------------------------------------- 
class Parser: 

    # CONSTRUCTOR 
    def __init__(self, url): 
     self.soup = bs(urllib.request.urlopen(url).read(), "lxml") 

    # METHODS 
    def getMetaData(self): 

     print(self.soup.prettify()[0:1000]) 

# MAIN FUNCTION -------------------------------------------------------------- 
if __name__ == "__main__": 

    webSite = Parser("http://www.donnamoderna.com") 
    webSite.getMetaData() 

います次の出力:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
    <head> 
     <title> 
      200 OK 
     </title> 
    </head> 
    <body> 
     <h1> 
      Error 200 OK 
     </h1> 
     <p> 
      OK 
     </p> 
     <h3> 
      Guru Meditation: 
     </h3> 
     <p> 
      XID: 1815743332 
     </p> 
     <hr/> 
     <p> 
      Varnish cache server 
     </p> 
    </body> 
</html> 

となぜこれが起こっている私は理解していません。プロキシのことではありません。私は使用しようとしました:

curl "http://www.donnamoderna.com" 

それはうまく動作します。私はhttps://www.google.comのような別のWebサイトでコードを試してみましたが、うまく動作します。 httpプロトコルが安全でないこと(つまり、http )ですか?コード内で何かを変更する必要がありますか?ありがとう。

+1

サーバーがあなたの要求を好きではありません。おそらくユーザーエージェントヘッダーを設定しようとします。 – pguardiario

答えて

1

したがって、サーバーが私の要求をa-not-a-browser要求と読んでいるため、要求されたコンテンツへのアクセスが拒否されたということが判明しました。私はrequestsLIBを使用して変更することで問題を解決することができた要求のheader、「サーバー 『を混同』するために、(ブラウザから来ているものとして私の要求をマスク)を次のように

import requests 

# CONSTRUCTOR 
def __init__(self, url): 

    # Necessary to make the server think that we are a browser 
    headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko)' 'Chrome/41.0.2227.1 Safari/537.36'} 

    # Make request 
    r = requests.get(url, headers=headers) 

    # Create soup object 
    self.soup = bs(r.content, 'html.parser')