2017-02-22 7 views
0

Цель состоит в том, чтобы напечатать текст всех районов в прокрутке вверху поиска Google при вводе термина типа «кварталы Нью-Йорка»Можно ли использовать запросы для печати всех элементов в прокрутке вверху поиска Google?

Несмотря на отсутствие проблемы с кодировкой при использовании запросов как ...

googleSearch = BeautifulSoup(requests.get('https://www.google.com/search?q=new+york+city+neighborhoods').content, "html.parser") 

... он не возвращает все HTML ответа, что я ожидал (всего несколько элементов в свитке существуют, несмотря на ответ Почтальон и Chrome, показывающий все из них) [1], который поэтому используется следующий метод (но для меня проблема с кодировкой):

url = "https://www.google.com/search" 

querystring = {"q":"New York City neighborhoods"} 

headers = { 
    'upgrade-insecure-requests': "1", 
    'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", 
    'x-chrome-uma-enabled': "1", 
    'x-client-data': "CIy2yQEIo7bJAQjEtskBCIuZygEI+pzKAQipncoB", 
    'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    'accept-encoding': "gzip, deflate, sdch, br", 
    'avail-dictionary': "MC9c6ZtH", 
    'accept-language': "en-US,en;q=0.8", 
    'cookie': "HSID=AQGYffYcWgUgwoIGG; SSID=AsyTtOTpG3P0TWe_e; APISID=DZOqFSNpfZmThOP6/A15eY85jEZTDT47_j; SAPISID=4jqCaE3zLEcO8GG4/ANI8HEy3etCmKfit2; SID=4AMk07dZM5wKaFcBAD7PgfLgMV1imGkqULwEdE9VI3lwoNRghaVTGT4ZT0mCGgzehY3mFg.; OGPC=5062210-7:765334528-2:699960320-1:961419264-9:; NID=97=bZNps3TAJFPAppe9EQbLyUDwXDbEFN57lT_capK2DQMWMVo7nEnYlPV-_g5OkOCERrN6MS5PxJXuVUOhjHeZGhCkS4FubcEapEzyuSQVS9rJM99rPzwE98ra47eP-ay0YTR-TawjFJ-0hAqT_j7SI7vQGVIU6yj4awM0hEt4ZXTd4k0RnH6kJPb0qVCc8AnQQLg4VZ0Kc1s83vJo6k7jFm-GCEoi; HSID=AQGYffYcWgUgwoIGG; SSID=AsyTtOTpG3P0TWe_e; APISID=DZOqFSNpfZmThOP6/A15eY85jEZTDT47_j; SAPISID=4jqCaE3zLEcO8GG4/ANI8HEy3etCmKfit2; SID=4AMk07dZM5wKaFcBAD7PgfLgMV1imGkqULwEdE9VI3lwoNRghaVTGT4ZT0mCGgzehY3mFg.; OGPC=5062210-7:765334528-2:699960320-1:961419264-9:; NID=97=bZNps3TAJFPAppe9EQbLyUDwXDbEFN57lT_capK2DQMWMVo7nEnYlPV-_g5OkOCERrN6MS5PxJXuVUOhjHeZGhCkS4FubcEapEzyuSQVS9rJM99rPzwE98ra47eP-ay0YTR-TawjFJ-0hAqT_j7SI7vQGVIU6yj4awM0hEt4ZXTd4k0RnH6kJPb0qVCc8AnQQLg4VZ0Kc1s83vJo6k7jFm-GCEoi; DV=Qg7Cq8EJDPcYvgxe_quK9y6d3FXJtAI", 
    'cache-control': "no-cache", 
    'postman-token': "e6cec459-250e-1795-0e78-c450e5dfd56b" 
    } 

При попытке извлечь ответ (который имеет код статуса 200):

googleSearch = BeautifulSoup(requests.request("GET", url, headers=headers, params=querystring).content, "html.parser") 

googleSearch.text печатает как:

Нет обработчики могут быть найдены для регистратора «bs4.dammit» [ # ֑ RK = V i $ YU $ + Y j2H & L> "R *^$ gDefukz0 j | ax ���1��k�a��6 y = X X þ `ɬ.MK; pgoĽ { { D5 gLJ o} ? [ 듟 [ ݷ ޾9 CmBFQ |

... с гораздо более странных персонажей

Может запросы использоваться для поиска Google, или другой модуль необходимо?

[1] ожидаемый HTML: html, показанный в ответе в приложении Postman, и Chrome содержит элементы div [class = "kltat"] (каждый элемент в прокрутке вверху страницы (в этом случае расположены кварталы) даже если пока не отображается в прокрутке), тогда как другие данные содержат HTML, который содержит только некоторые элементы прокрутки и элементы div [class = "kltat"]

+0

Да, я пробовал в Python 2.7.13. На какой ОС вы работаете? Может быть связано с [этим вопросом] (http://stackoverflow.com/questions/38697915/cannot-figure-out-whats-wrong-with-beautifulsoup4-in-my-python-3-script) –

+0

работает с Python 2.7. 10 на MacOS Sierra в PyCharm – Phillip

+0

Просто чтобы подтвердить, можете ли вы распечатать все окрестности в прокрутке (текст элементов div [class = "kltat"]) – Phillip

ответ

1

Включая эту строку, сообщает сервер Google, на который они могут ответить, используя http-compression:

'accept-encoding': "gzip, deflate, sdch, br" 

Я думаю, что сжатие используется gzip, хотя t также позволяет дефлировать, Brotli и Google Shared Dictionary Compression.

Вы можете удалить линию accept-encoding из своих заголовков; или импортировать библиотеку gzip и разархивировать содержимое.

+0

Это было очень остро и решило проблему. 'окрестности = [dv.text для dv в googleSearch.find_all ('div', {'class': 'kltat'})] 'используется с методом с исходной проблемой кодирования/сжатия (содержащий все элементы прокрутки) – Phillip

Смежные вопросы