【问题标题】:httplib.BadStatusLine: ''httplib.BadStatusLine: ''
【发布时间】:2015-02-21 12:43:44
【问题描述】:

与往常一样,我经常遇到问题,并且我已经彻底寻找当前问题的答案,但发现自己不知所措。以下是我搜索过的一些地方: - How to fix httplib.BadStatusLine exception? - Python httplib2 Handling Exceptions - python http status code

我的问题如下。我创建了一个蜘蛛并想抓取不同的网址。当我独立抓取每个网址时,一切正常。但是,当我尝试同时抓取两者时,出现以下错误:httplib.BadStatusLine: ''

我遵循了我阅读的一些建议(请参阅上面提到的链接)并且可以打印每个请求的 response.status 工作,但 response.url 不打印并且抛出错误。 (我只打印这两个语句来尝试识别错误的来源)。

我希望这很清楚。

我正在使用 scrapy 和 selenium

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()

【问题讨论】:

    标签: python selenium scrapy


    【解决方案1】:

    基于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
    

    【讨论】:

      【解决方案2】:

      我做了一个装饰器来做上面的答案,以便使代码易于重用。这里是:

      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
      

      【讨论】:

        【解决方案3】:

        我遇到了这个错误,因为我定义了一个selenium.webdriver 实例(名为driver),在其上调用driver.quit(),然后尝试在退出驱动程序上调用driver.get(url)。解决方法是不要调用driver.quit()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-24
          • 2017-10-12
          • 2017-05-28
          • 2013-08-03
          • 2012-05-29
          • 2017-04-09
          • 2017-03-10
          • 1970-01-01
          相关资源
          最近更新 更多