Как очистить несколько страниц с неизменным URL-адресом — Python 3

Недавно я связался с веб-скраппингом и попытался просмотреть веб-страницы. На данный момент я пытаюсь очистить следующий сайт: http://www.pizzahut.com.cn/StoreList

До сих пор я использовал селен, чтобы очистить долготу и широту. Однако мой код прямо сейчас извлекает только первую страницу. Я знаю, что есть динамический веб-скрапинг, который выполняет javascript и загружает разные страницы, но мне было трудно найти правильное решение. Мне было интересно, есть ли способ получить доступ к другим 49 страницам или около того, потому что, когда я нажимаю на следующую страницу, URL-адрес не меняется, потому что он установлен, поэтому я не могу просто перебирать другой URL-адрес каждый раз

Ниже приведен мой код:

import os
import requests
import csv
import sys
import time
from bs4 import BeautifulSoup

page = requests.get('http://www.pizzahut.com.cn/StoreList')

soup = BeautifulSoup(page.text, 'html.parser')

for row in soup.find_all('div',class_='re_RNew'):
    name = row.find('p',class_='re_NameNew').string
    info = row.find('input').get('value')
    location = info.split('|')
    location_data = location[0].split(',')
    longitude = location_data[0]
    latitude = location_data[1]
    print(longitude, latitude)

Большое спасибо за помощь. Очень признателен


person DanLee    schedule 26.02.2018    source источник


Ответы (1)


Шаги для получения данных:

Откройте инструменты разработчика в своем браузере (для Google Chrome это Ctrl+Shift+I). Теперь перейдите на вкладку XHR, которая находится внутри вкладки Network.

введите здесь описание изображения

После этого нажмите на кнопку следующей страницы. Вы увидите следующий файл.

введите здесь описание изображения

Нажмите на этот файл. В блоке Общие вы увидите эти две вещи, которые нам нужны.

введите здесь описание изображения

Прокрутив вниз, на вкладке Данные формы вы увидите 3 переменные:

введите здесь описание изображения

Здесь вы можете видеть, что изменение значения pageIndex даст все необходимые страницы.

Теперь, когда у нас есть все необходимые данные, мы можем написать метод POST для URL-адреса http://www.pizzahut.com.cn/StoreList/Index, используя приведенные выше данные.

Код:

Я покажу вам код для очистки первых 2 страниц, вы можете очистить любое количество страниц, которое хотите, изменив range().

for page_no in range(1, 3):
    data = {
        'pageIndex': page_no,
        'pageSize': 10,
        'keyword': '输入餐厅地址或餐厅名称'
    }
    page = requests.post('http://www.pizzahut.com.cn/StoreList/Index', data=data)
    soup = BeautifulSoup(page.text, 'html.parser')

    print('PAGE', page_no)
    for row in soup.find_all('div',class_='re_RNew'):
        name = row.find('p',class_='re_NameNew').string
        info = row.find('input').get('value')
        location = info.split('|')
        location_data = location[0].split(',')
        longitude = location_data[0]
        latitude = location_data[1]
        print(longitude, latitude)

Вывод:

PAGE 1
31.085877 121.399176
31.271117 121.587577
31.098122 121.413396
31.331458 121.440183
31.094581 121.503654
31.270737000 121.481178000
31.138214 121.386943
30.915685 121.482079
31.279029 121.529255
31.168283 121.283322
PAGE 2
31.388674 121.35918
31.231706 121.472644
31.094857 121.219961
31.228564 121.516609
31.235717 121.478692
31.288498 121.521882
31.155139 121.428885
31.235249 121.474639
30.728829 121.341429
31.260372 121.343066

Примечание. Вы можете изменить количество результатов на странице, изменив значение pageSize (в настоящее время 10).

person Keyur Potdar    schedule 26.02.2018