Пробежав все страницы

Я делаю приложение для поиска людей, которое будет бесплатным. Он просмотрит всех людей в Техасе по именам и найдет их домашний адрес. Я только начал и не могу понять, как будет работать циклическое перелистывание всех страниц. Есть ли хороший и надежный способ сделать это? Я просто тупой? Это мой первый большой проект, и мне бы очень пригодилась помощь.

import json
from time import sleep

name = input("Enter full name: ")

def namesearchwilcounty(name):
    url = "https://search.wcad.org/ProxyT/Search/Properties/quick/"
    params = {
        "f": name,
        "pn": 1,
        "st": 4,
        "so": "desc",
        "pt": "RP;PP;MH;NR",
        "ty": "2024"
    }

    response = requests.get(url, params=params)

    if response.status_code == 200:
        data = response.json()
        if data and "ResultList" in data and data["ResultList"]:
            print("Situs Addresses and Owner Names:")
            processed_results = set()  # Set to store processed results
            for item in data["ResultList"]:
                situs_address = item["SitusAddress"]
                owner_name = item["OwnerName"]
                total_page_count = item.get("TotalPageCount", 1)
                current_page = 1
                while current_page <= total_page_count:
                    params["pn"] = current_page  # Update the page number in params
                    response = requests.get(url, params=params)
                    if response.status_code == 200:
                        page_data = response.json()
                        for item in page_data["ResultList"]:
                            situs_address = item["SitusAddress"]
                            owner_name = item["OwnerName"]
                            result = f"{owner_name} {situs_address}"
                            if result not in processed_results:
                                print(f"Page {current_page}: {result}")
                                processed_results.add(result)  # Add result to the set
                        current_page += 1
                        sleep(1)  # Add a delay between requests
                    else:
                        print(f"Error: {response.status_code} - {response.text}")
                        break
        else:
            print("No data found in the response.")
    else:
        print(f"Error: {response.status_code} - {response.text}")


namesearchwilcounty(name)

Было бы полезно, если бы вы сказали, в чем именно заключается проблема, а не просто «Мне тяжело».

John Gordon 28.04.2024 17:35

Пробуя ваш код, я всегда получаю не более 1 страницы из 25 результатов, независимо от того, какое имя я использую. API, похоже, не возвращает больше этого.

Mark Tolonen 28.04.2024 18:37

сначала посетите несколько страниц в браузере и посмотрите, какие параметры браузер отправляет на сервер. Вы также можете проверить, можете ли вы загрузить другую страницу в браузере при изменении какого-либо параметра. И проверьте, можете ли вы посещать страницы с гораздо большим количеством посетителей. Некоторые серверы отправляют только несколько страниц - возможно, потому, что порталы созданы для людей, а люди устают после нескольких страниц, поэтому нет необходимости создавать страницы с большим количеством страниц. ИЛИ, возможно, это способ помешать спамерам/хакерам/скребкам получить все данные.

furas 29.04.2024 01:53

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 29.04.2024 09:57
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что параметр pn представляет собой номер страницы (база 1) и что страницы больше не доступны, когда RecordCount равен нулю.

Итак, упростив код, вы можете сделать это:

import requests
from requests.adapters import HTTPAdapter, Retry

URL = "https://search.wcad.org/ProxyT/Search/Properties/quick/"

MAX_RETRIES = 5
RETRIES = Retry(total=MAX_RETRIES, status_forcelist=[429])

def search(name):
    params = {
        "f": name,
        "pn": 1,
        "st": 4,
        "so": "desc",
        "pt": "RP;PP;MH;NR",
        "ty": "2024"
    }
    with requests.Session() as session:
        session.mount(URL, HTTPAdapter(max_retries=RETRIES))
        while True:
            with session.get(URL, params=params) as response:
                response.raise_for_status()
                data = response.json()
                if (record_count := data.get("RecordCount", 0)) == 0:
                    print("No more records")
                    break
                print(f"current_page = {params["pn"]} {record_count=}")
                params["pn"] += 1

search("Kennedy")

Выход:

current_page=1 record_count=25
current_page=2 record_count=25
current_page=3 record_count=25
current_page=4 record_count=25
current_page=5 record_count=25
current_page=6 record_count=25
current_page=7 record_count=9
No more records

Другие вопросы по теме