Sağlık hizmeti veri portalları (sağlayıcı dizinleri, ilaç fiyatlandırma veritabanları ve klinik deney kayıtları) otomatik veri toplamayı önlemek için CAPTCHA'ları kullanır. Araştırmacılar ve sağlık teknolojisi platformları analitik, uyumluluk ve bilinçli karar verme için bu verilere ihtiyaç duyuyor.
CAPTCHA'ların Göründüğü Yer
| Kaynak | CAPTCHA Türü | Veri | Kullanım Örneği |
|---|---|---|---|
| Sağlayıcı dizinleri (NPI) | Resim CAPTCHA'sı | Doktor/facility araması | Ağ yeterliliği |
| İlaç fiyatlandırma portalları | reCAPTCHA v2 | İlaç fiyatları | Fiyat şeffaflığı |
| Klinik deneme kayıtları | reCAPTCHA v2 | Deneme verileri, sonuçlar | Araştırma analizi |
| Sigorta formülleri | reCAPTCHA v2 | İlaç kapsamı listeleri | Formül karşılaştırması |
| Eyalet lisans kurulları | Resim CAPTCHA'sı | Lisans doğrulama | Kimlik bilgisi kontrolleri |
| Hastane kalite derecelendirmeleri | Cloudflare Turnstile | Kalite ölçümleri | Performans analizi |
Sağlayıcı Dizin Kazıyıcı
import requests
import time
import re
import base64
from bs4 import BeautifulSoup
import csv
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
def solve_recaptcha(sitekey, pageurl):
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY, "method": "userrecaptcha",
"googlekey": sitekey, "pageurl": pageurl, "json": 1,
})
task_id = resp.json()["request"]
for _ in range(60):
time.sleep(5)
result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = result.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
def solve_image_captcha(image_bytes):
img_b64 = base64.b64encode(image_bytes).decode()
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY, "method": "base64",
"body": img_b64, "json": 1,
})
task_id = resp.json()["request"]
for _ in range(20):
time.sleep(3)
result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = result.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
class HealthcareDataCollector:
def __init__(self, proxy=None):
self.session = requests.Session()
if proxy:
self.session.proxies = {"http": proxy, "https": proxy}
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36",
})
def search_providers(self, portal_url, specialty, location, sitekey=None):
"""Search provider directory with CAPTCHA handling."""
resp = self.session.get(portal_url, timeout=30)
data = {"specialty": specialty, "location": location}
# Handle CAPTCHA
if sitekey:
token = solve_recaptcha(sitekey, portal_url)
data["g-recaptcha-response"] = token
else:
captcha_img = re.search(r'src="(/captcha[^"]+)"', resp.text)
if captcha_img:
img_url = portal_url.rstrip("/") + captcha_img.group(1)
img = self.session.get(img_url)
data["captcha"] = solve_image_captcha(img.content)
resp = self.session.post(portal_url, data=data)
return self._parse_providers(resp.text)
def lookup_drug_prices(self, pricing_url, drug_name, zip_code, sitekey):
"""Look up drug prices with CAPTCHA solving."""
# Load search page
self.session.get(pricing_url)
# Solve CAPTCHA
token = solve_recaptcha(sitekey, pricing_url)
resp = self.session.post(pricing_url, data={
"drug": drug_name,
"zip": zip_code,
"g-recaptcha-response": token,
})
if resp.status_code == 200:
return self._parse_prices(resp.text)
return []
def batch_provider_lookup(self, portal_url, specialties, locations, output_file):
"""Batch search across specialties and locations."""
all_providers = []
for specialty in specialties:
for location in locations:
try:
providers = self.search_providers(
portal_url, specialty, location,
)
for p in providers:
p["specialty_search"] = specialty
p["location_search"] = location
all_providers.extend(providers)
print(f"{specialty} / {location}: {len(providers)} providers")
time.sleep(5)
except Exception as e:
print(f"Error: {specialty} / {location}: {e}")
# Export
if all_providers:
keys = all_providers[0].keys()
with open(output_file, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader()
writer.writerows(all_providers)
return all_providers
def _parse_providers(self, html):
soup = BeautifulSoup(html, "html.parser")
providers = []
for card in soup.select(".provider-card, .doctor-result, tr.provider"):
providers.append({
"name": self._text(card, ".name, .provider-name"),
"specialty": self._text(card, ".specialty"),
"address": self._text(card, ".address"),
"phone": self._text(card, ".phone"),
"accepting": self._text(card, ".accepting-patients"),
})
return providers
def _parse_prices(self, html):
soup = BeautifulSoup(html, "html.parser")
prices = []
for row in soup.select(".pharmacy-row, .price-result"):
prices.append({
"pharmacy": self._text(row, ".pharmacy-name"),
"price": self._text(row, ".price, .drug-price"),
"quantity": self._text(row, ".quantity"),
})
return prices
def _text(self, el, selector):
found = el.select_one(selector)
return found.get_text(strip=True) if found else ""
# Usage
collector = HealthcareDataCollector(
proxy="http://user:pass@residential.proxy.com:5000"
)
# Provider search
providers = collector.search_providers(
portal_url="https://provider-directory.example.com/search",
specialty="Cardiology",
location="New York, NY",
)
# Drug pricing
prices = collector.lookup_drug_prices(
pricing_url="https://drug-prices.example.com/compare",
drug_name="atorvastatin",
zip_code="10001",
sitekey="6Lc_xxxxxxx",
)
Klinik Deneme Veri Toplama
def collect_clinical_trials(search_url, condition, sitekey):
"""Collect clinical trial data for a medical condition."""
collector = HealthcareDataCollector(
proxy="http://user:pass@residential.proxy.com:5000"
)
token = solve_recaptcha(sitekey, search_url)
resp = collector.session.post(search_url, data={
"condition": condition,
"status": "recruiting",
"g-recaptcha-response": token,
})
if resp.status_code != 200:
return []
soup = BeautifulSoup(resp.text, "html.parser")
trials = []
for item in soup.select(".trial-item, .study-result"):
trials.append({
"title": collector._text(item, ".title, h3"),
"status": collector._text(item, ".status"),
"sponsor": collector._text(item, ".sponsor"),
"phase": collector._text(item, ".phase"),
"enrollment": collector._text(item, ".enrollment"),
"location": collector._text(item, ".location"),
})
return trials
Veri Gizliliğiyle İlgili Hususlar
| Veri Türü | Hassasiyet | Tavsiye |
|---|---|---|
| Sağlayıcı dizinleri | Düşük (genel bilgi) | Genellikle toplanması güvenlidir |
| İlaç fiyatlandırması | Düşük (genel fiyatlandırma) | Şeffaflık için izin verildi |
| Klinik deneme meta verileri | Düşük (kamu kayıtları) | Araştırma kullanımı uygun |
| Hasta incelemeleri | Orta | Analizden önce anonimleştirin |
| Sigorta planı ayrıntıları | Düşük (yayınlanan oranlar) | Karşılaştırma için izin verildi |
Önemli: Asla korumalı sağlık bilgilerini (PHI) toplamaya çalışmayın. Yalnızca kamuya açık, hastaya özgü olmayan verilere odaklanın.
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Resim CAPTCHA'sı okunamıyor | Düşük kaliteli görüntü | Yeniden dene – yeni resim oluşturuldu |
| Sağlayıcı araması boş sonuç veriyor | CAPTCHA aramayı engelledi | Göndermeden önce CAPTCHA'yı çözün |
| İlaç fiyatı lokasyona göre değişiyor | Coğrafi tabanlı fiyatlandırma | Proxy konumunu posta koduyla eşleştirin |
| Çoklu sayfada oturum sona eriyor | Portal zaman aşımı | Aramaları hızla tamamlayın |
| Toplu aramalarda oran sınırlı | Çok fazla istek | 5-10 saniyelik gecikmeler ekleyin |
SSS
Sağlık hizmeti fiyatlandırma verilerinin toplanmasına izin veriliyor mu?
İlaç fiyatlandırma şeffaflığı düzenleme (CMS Fiyat Şeffaflığı Kuralı) tarafından teşvik edilmektedir. Kamu sağlayıcı dizin verilerine genel olarak erişilebilir.
Eczaneler arası ilaç fiyatlarını karşılaştırabilir miyim?
Evet. GoodRx gibi hizmetler bunu geniş ölçekte yapıyor. CaptchaAI, fiyatlandırma portallarının otomatik erişimi sınırlamak için kullandığı CAPTCHA'ları yönetir.
Sağlık hizmetleri sitelerini kazırken HIPAA'yı nasıl halledebilirim?
HIPAA, korunan sağlık bilgileri (PHI) için geçerlidir. Sağlayıcı dizinleri, ilaç fiyatları ve klinik araştırma kayıtları gibi halka açık veriler PHI değildir. Asla bireysel hasta kayıtlarını kazımayın.
İlgili Kılavuzlar
Sağlık hizmeti verilerini verimli bir şekilde toplayın —CaptchaAI anahtarınızı alınsağlayıcı ve fiyat aramalarını otomatikleştirin.