Я делаю приложение для поиска людей, которое будет бесплатным. Он просмотрит всех людей в Техасе по именам и найдет их домашний адрес. Я только начал и не могу понять, как будет работать циклическое перелистывание всех страниц. Есть ли хороший и надежный способ сделать это? Я просто тупой? Это мой первый большой проект, и мне бы очень пригодилась помощь.
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)
Пробуя ваш код, я всегда получаю не более 1 страницы из 25 результатов, независимо от того, какое имя я использую. API, похоже, не возвращает больше этого.
сначала посетите несколько страниц в браузере и посмотрите, какие параметры браузер отправляет на сервер. Вы также можете проверить, можете ли вы загрузить другую страницу в браузере при изменении какого-либо параметра. И проверьте, можете ли вы посещать страницы с гораздо большим количеством посетителей. Некоторые серверы отправляют только несколько страниц - возможно, потому, что порталы созданы для людей, а люди устают после нескольких страниц, поэтому нет необходимости создавать страницы с большим количеством страниц. ИЛИ, возможно, это способ помешать спамерам/хакерам/скребкам получить все данные.
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.
Кажется, что параметр 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
Было бы полезно, если бы вы сказали, в чем именно заключается проблема, а не просто «Мне тяжело».