Python Mechanize IncompleteRead Ошибка - PullRequest
0 голосов
/ 25 декабря 2011

Я экспериментирую с механизацией и снова нахожу сайты, которые соответствуют списку розничных магазинов.

Я анализировал результаты поиска Bing, чтобы получить URL-адрес верхнего результата. К сожалению, казалось бы, независимый от запроса, в случайное время я получаю ошибку httplib.IncompleteRead. Несмотря на то, что у меня есть обходной путь, который следует, я хотел бы понять, что происходит.

def bingSearch(query): #query is the store's name, i.e. "Bob's Pet Shop"
     while True:
         try:
             bingBrowser.open('http://www.bing.com/search?q="' + query.replace(' ','+') + '"' )
             htmlCode = bingBrowser.response().read()
             break
         except httplib.IncompleteRead:
             #Sleep for a little while and try again.

Другая важная информация:

  • Иногда для одного URL-адреса bing программа пытается несколько раз открыть и прочитать этот URL-адрес перед успешным чтением без ошибки IncompleteRead.
  • Атрибут заголовков bingBrowser настроен так, чтобы выглядеть красиво.
  • Атрибут robots bingBrowser имеет значение false.
  • httplib: неполное чтение ... Я ничего не знаю об Apache, поэтому не смог понять ответ на вопрос, но он может быть полезен для вас. Тем не менее, я сомневаюсь, что у меня похожая проблема (почему bing.com страдает от ошибки Apache?!)

Edit:

  1. Заменен query.replace ('', '+') + '"') на urllib.urlencode (dict (q = query)) в соответствии с предложением Дж.Ф. Себастьяна - без изменений (я знаю, что это не было предложено как решение ).
  2. Пострадал от необъяснимого urllib2.URLError на bingBrowser.open ('http://www.bing.com/search?q="' + query.replace (' ',' + ') +' "')
  3. Получена ошибка xlwt "Строка длиннее 65535 символов" - вероятно, не связана.

Заранее спасибо.

1 Ответ

0 голосов
/ 06 января 2012

Я столкнулся с подобной проблемой.Дело в том, что вы не перехватываете все исключения, которые могут возникнуть при подключении к Bing.

Здесь вы можете найти решение здесь .В моем случае это работает правильно.

...