Python3でwebスクレイピングしたいのですが存在するURLが開けません。

投稿者: Anonymous

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

urllib.error.HTTPError: HTTP Error 403: Forbidden

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

 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)

解決

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

#!/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)

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

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *