2016-10-19 3 views
2

Я пытаюсь проанализировать данные веб-сайта, который загружается при прокрутке пользователя. Существует конечное число элементов, которое может появляется во время прокрутки, но с помощью этого дает только первую часть (25 из 112):Запрос возвращает частичную страницу

url = "http://url/to/website" 
response = requests.get(url) 
soup = BeautifulSoup(response.text) 

Как я могу сказать request «прокручивать» до возвращения HTML?

EDIT: по-видимому, запрос не делает этого, какое решение я могу использовать в Python?

+1

Возможно, вы можете имитировать, что происходит, когда вы просматриваете HTTP-запросы. –

ответ

2

Единственное, что вы должны знать, так это то, как работает сервер.

Обычно onScroll или onClick или любое другое событие вызовет AJAX request к серверу. И javascript на стороне клиента будет отображать эти возвраты (JSON/XML ...). Единственное, что вам нужно сделать, это повторить эти запросы AJAX на один и тот же сервер, чтобы получить эти данные.

Например, действие в браузере будет, как показано ниже:

1. Enter url on browser 
> [HTTP GET REQUEST] http://url/to/website 

2. Scroll on the page 
> [AJAX GET] http://url/to/website/1 
> [javascript on front-end will process those data] 

3. Then, keeping scrolling on the page 
> [AJAX GET] http://url/to/website/2 
> [javascript on front-end will process those data] 

4. ... (and so on) 

Q. Как использовать Python, чтобы получить эти данные?

A. Один простой способ: использовать browser > inspect > network_tab, чтобы найти запрос AJAX, который вы отправляете при прокрутке на этой странице. И повторите этот запрос AJAX с соответствующим заголовком с помощью python.

5

Вы не можете. Вопрос основан на непонимании того, что делает запрос; он загружает только содержимое страницы. Бесконечная прокрутка работает от Javascript, запросы которого ничего не сделают.

Для этого вам понадобятся некоторые средства автоматизации браузера, такие как Selenium; или выяснить, какая конечная точка Ajax используется прокруткой JS и загружать ее напрямую.

+0

Спасибо, я немного боялся этого. Я обновил свой вопрос, чтобы найти конкретное решение – CoMartel

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