تستخدم بوابات بيانات الرعاية الصحية - أدلة مقدمي الخدمة، وقواعد بيانات تسعير الأدوية، وسجلات التجارب السريرية - اختبار CAPTCHA لمنع جمع البيانات تلقائيًا. يحتاج الباحثون ومنصات التكنولوجيا الصحية إلى هذه البيانات لإجراء التحليلات والامتثال واتخاذ القرارات المستنيرة.
مكان ظهور اختبار CAPTCHA
| المصدر | نوع التحقق | البيانات | حالة الاستخدام |
|---|---|---|---|
| أدلة الموفرين (NPI) | صورة التحقق | بحث Doctor/facility | كفاية الشبكة |
| بوابات تسعير الأدوية | reCAPTCHA v2 | أسعار الأدوية | شفافية الأسعار |
| سجلات التجارب السريرية | reCAPTCHA v2 | بيانات التجربة، النتائج | تحليل البحوث |
| صيغ التأمين | reCAPTCHA v2 | قوائم تغطية المخدرات | مقارنة الوصفات |
| مجالس ترخيص الدولة | صورة التحقق | التحقق من الترخيص | الشيكات الاعتماد |
| تقييمات جودة المستشفى | Cloudflare Turnstile | مقاييس الجودة | تحليل الأداء |
مكشطة دليل الموفر
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",
)
جمع بيانات التجارب السريرية
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
اعتبارات خصوصية البيانات
| نوع البيانات | الحساسية | توصية |
|---|---|---|
| أدلة الموفر | منخفض (معلومات عامة) | بشكل عام آمن للجمع |
| تسعير الأدوية | منخفض (التسعير العام) | مسموح به للشفافية |
| البيانات الوصفية للتجارب السريرية | منخفض (السجلات العامة) | استخدام البحوث المناسبة |
| مراجعات المرضى | متوسط | إخفاء الهوية قبل التحليل |
| تفاصيل خطة التأمين | منخفضة (المعدلات المنشورة) | مسموح للمقارنة |
هام: لا تحاول مطلقًا جمع معلومات صحية محمية (PHI). ركز فقط على البيانات المتاحة للعامة وغير الخاصة بالمريض.
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| صورة CAPTCHA غير قابلة للقراءة | صورة ذات جودة منخفضة | أعد المحاولة - تم إنشاء صورة جديدة |
| يعود بحث الموفر فارغًا | قام CAPTCHA بحظر البحث | حل اختبار CAPTCHA قبل الإرسال |
| سعر الدواء يختلف حسب الموقع | التسعير على أساس الجغرافي | مطابقة موقع الوكيل بالرمز البريدي |
| تنتهي صلاحية الجلسة على صفحات متعددة | مهلة البوابة | استكمال عمليات البحث بسرعة |
| معدل محدود على عمليات البحث دفعة | طلبات كثيرة جدًا | إضافة تأخير 5-10 ثانية |
الأسئلة الشائعة
هل يُسمح بجمع بيانات تسعير الرعاية الصحية؟
يتم تشجيع شفافية تسعير الأدوية من خلال التنظيم (قاعدة شفافية أسعار CMS). يمكن الوصول إلى بيانات دليل الموفر العام بشكل عام.
هل يمكنني مقارنة أسعار الأدوية في الصيدليات؟
نعم. خدمات مثل GoodRx تفعل ذلك على نطاق واسع. يتعامل CaptchaAI مع اختبارات CAPTCHA التي تستخدمها بوابات التسعير للحد من الوصول الآلي.
كيف أتعامل مع HIPAA عند إلغاء مواقع الرعاية الصحية؟
ينطبق HIPAA على المعلومات الصحية المحمية (PHI). البيانات العامة مثل أدلة مقدمي الخدمة، وأسعار الأدوية، وسجلات التجارب السريرية ليست معلومات صحية محمية. لا تقم أبدًا بكشط سجلات المرضى الفردية.
أدلة ذات صلة
- أتمتة البوابة الحكومية مع حل اختبار CAPTCHA
- جمع البيانات البحثية الأكاديمية من المواقع المحمية بـ CAPTCHA
- جمع بيانات الرعاية الصحية بكفاءة -احصل على مفتاح CaptchaAI الخاص بكوأتمتة عمليات البحث عن المزودين والأسعار.*