2016-06-18 24 views
1

NYCの建物に関する情報を入手するためのスクリプトを書いています。私は自分のコードが動作していることを知り、私が望むものを返します。私は以前に手動で入力していました。今、私はそれがテキストファイルから読み出しアドレスを持っているし、その情報をウェブサイトにアクセスしようとしていると私はこのエラーになっています:HTTPエラー400:間違ったリクエスト(urllib)

urllib.error.HTTPError:HTTPエラー400:不正な要求

Iをそれはブラウザではないものからのアクセスがたくさん好きではないというウェブサイトと関係があると考えています。私はユーザーエージェントについて何か聞いたことがありますが、それらを使用する方法はわかりません。ここに私のコードはあります:

+0

コードを単独で実行したという事実は、サーバーがユーザーエージェントだけに基づいて要求を停止していることを疑います。可能性が高いのは、クライアントのレート制限やリクエストの構築方法のバグです...あなたのリンクの実際のコードとファイルのサンプル行を入れてください。 –

+0

明日の朝に私はあなたに戻ってきます! – Harrison

答えて

2

400エラーは、サーバーがあなたの要求(例えば、不正な構文)を理解できないことを意味します。つまり、開発者がどのステータスコードを返そうとしているのか、残念ながら誰もが意図した意味に厳密に従うわけではありません。

HTTPステータスコードの詳細については、pageをご覧ください。

ユーザエージェントを設定する方法に関して: ユーザエージェントはリクエストヘッダに設定され、基本的にリクエストを行うクライアントを定義します。ここに認識されたUser Agentsのリストがあります。 urllibではなくurllib2を使用する必要がありますが、urllib2も組み込みパッケージです。 getBuilding関数を更新して、そのモジュールを使用してヘッダを設定する方法を説明します。しかし、私はrequestsライブラリをチェックアウトすることをお勧めします。私はそれがスーパーストレートであることが分かり、それは非常に採用/サポートされています。

パイソン2:

from urllib2 import Request, urlopen 

def getBuilding(link):   
    q = Request(link) 
    q.add_header('User-Agent', 'Mozilla/5.0') 
    r = urlopen(q).read() 
    soup = BeautifulSoup(r, "html.parser") 
    print(soup.find("b",text="KEYWORDS IM SEARCHING FOR GO HERE:").find_next("td").text) 

のPython 3:

from urllib.request import Request, urlopen 

def getBuilding(link):   
    q = Request(link) 
    q.add_header('User-Agent', 'Mozilla/5.0') 
    r = urlopen(q).read() 
    soup = BeautifulSoup(r, "html.parser") 
    print(soup.find("b",text="KEYWORDS IM SEARCHING FOR GO HERE:").find_next("td").text) 

注:パイソンV2およびV3との間の唯一の違いは、インポートステートメントです。

+0

それは、urllib2という名前のモジュールがないことを私に伝えています。それはpython 3正しいを使用して私に起因するだろうか? – Harrison

+0

Yup - Python 2と3の両方のインポートステートメントを示すために私の答えを更新しました。代わりに、あなたは@ cees-timmerman [ここ](http://stackoverflow.com/questions/7933417/how-do-i-set-headers-using-pythons-urllib/24870196#24870196)によって提供されるソリューションのような何かをすることができます)両方のバージョンで互換性のあるインポートステートメントを持っています –

+0

ImportError:名前 'Request'をインポートできませんか? – Harrison

関連する問題