web-dev-qa-db-ja.com

httplib.BadStatusLine: ''

いつものように、私は頻繁に問題を抱えており、現在の答えを徹底的に検索しましたが、途方に暮れています。検索した場所の一部を次に示します。- httplib.BadStatusLine例外を修正する方法は? - Python httplib2の処理例外 - python httpステータスコード

私の問題は次のとおりです。クモを作成しましたが、異なるURLをクロールしたいです。各URLを個別にクロールすると、すべてが正常に機能します。ただし、両方をクロールしようとすると、次のエラーが表示されます:httplib.BadStatusLine: ''

私が読んだいくつかのアドバイスに従い(上記のリンクを参照)、各リクエストのresponse.statusを印刷できますが、response.urlは印刷されず、エラーがスローされます。 (エラーの原因を特定するために、両方のステートメントを印刷するだけです)。

これが明確であることを願っています。

私はスクレイピーとセレンを使用しています

class PeoplePage(Spider):
    name = "peopleProfile"
    allowed_domains = ["blah.com"]
    handle_httpstatus_list = [200, 404]
    start_urls = [
        "url1",
        "url2"
    ]

    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self, response):
        print response.status
        print '???????????????????????????????????'
        if response.status == 200:
            self.driver.implicitly_wait(5)
            self.driver.get(response.url)
            print response.url
            print '!!!!!!!!!!!!!!!!!!!!'

            # DO STUFF

        self.driver.close()
16
Jonathan Sitruk

Python Dochttplib.BadStatusLine不明なHTTPステータスコードでサーバーが応答した場合に発生します。この例外を渡そうとすることができます。複数のURLを呼び出す場合は、ドライバーを閉じないでください。

これを試して:

def parse(self, response):
    try:
        print response.status
        print '???????????????????????????????????'
        if response.status == 200:
            self.driver.implicitly_wait(5)
            self.driver.get(response.url)
            print response.url
            print '!!!!!!!!!!!!!!!!!!!!'

            # DO STUFF
    except httplib.BadStatusLine:
        pass
20
Nima Soroush

コードを簡単に再利用できるように、トップアンサーが行うことを行うデコレーターを作成しました。ここにあります:

import http

def pass_bad_status_line_exc(wrapped_function):
    """
    Silently pass this exception `http.client.BadStatusLine` decorator
    """
    def _wrapper(*args, **kwargs):
        try:
            result = wrapped_function(*args, **kwargs)
        except http.client.BadStatusLine:
            return
        return result
    return _wrapper
1
Aaron Lelevier

driver.quit()という名前の_Selenium.webdriver_インスタンス(driverという名前)を定義し、終了ドライバーでdriver.get(url)を呼び出そうとしたため、このエラーが発生しました。 。解決策は、driver.quit()を呼び出さないことです。

0
duhaime

これがどれだけ役立つかはわかりませんが、私にとってはPOSTリクエストを発行しようとしていました。それを行うには新しいHTTP接続が必要です。使用できません。複数のリクエストに対して同じ接続を使用します。同じエラーが引き続き発生します:httplib.BadStatusLine: ''。ドキュメントでこれが概説されていると思いますが、見落としました。

0