27923


python3でBeautifulSoupを使い、webスクレイピングしたいのですが、

> urllib.error.HTTPError: HTTP Error 403: Forbidden

と言うエラーが出てしまいます。  
これはスクレイパーによるアクセスがサイト側に拒否されているということでしょうか？  
このエラーが出るということはこのサイトではスクレイピングできないということでしょうか？回避する方法はありますか？  
以下がコードです。

[code]

     def RichestSchool():
    """get 100 richest school names """
    html = urlopen("http://www.thebestschools.org/features/richest-universities-endowments-generosity-research/")
    bsObj = BeautifulSoup(html, "lxml")
    for rich in bsObj.findAll("a", {"target":"_blank"}):
        riches = rich.get_text()
        print(riches)
    
[/code]


CC BY-SA 3.0
2016-07-28T14:42:04.000
27922
2016-07-28T15:16:50.593
9597
question
python web-scraping
Python3でwebスクレイピングしたいのですが存在するURLが開けません。


metropolisさんのコメント通りユーザエージェントの問題ですね。  
下記のようにFirefoxに偽装するとアクセス出来ます。

[code]

    #!/usr/bin/python3
    import urllib.request
    
    url = "http://www.thebestschools.org/features/richest-universities-endowments-generosity-research/"
    headers = {
            "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",
            }
    
    request = urllib.request.Request(url=url, headers=headers)
    response = urllib.request.urlopen(request)
    html = response.read().decode('utf-8')
    print(html)
    
[/code]

[robts.txt](http://www.thebestschools.org/robots.txt)を見ても、特に厳しくは無いですし、どうしてこのような制限を掛けているのかは分からないですね。  
まあ何にせよ、マナーには気を付けてアクセスするのがよいでしょう。


CC BY-SA 3.0
2016-07-28T15:16:50.593
27923
2016-07-28T15:16:50.593
3054
27922
answer