ویرگول
ورودثبت نام
Amir
Amirیک برنامه‌نویس خسته.
Amir
Amir
خواندن ۳ دقیقه·۱۹ روز پیش

جمع آوری خودکار اطلاعات از دیوار

در اوضاع قطعی اینترنت و جنگ

داشتم روی پلتفرم دیوار آگهی‌ها رو مطالعه میکردم

من برنامه‌نویس هستم و بی‌ اینترنتی و محرومیت از دنیای تکنولوژی خیلی برام طاقت‌فرسا بود

البته هنوز هم اوضاع مثل سابق نشده و شاید هم نشه! بگذریم...

اومدم یه برنامه به زبان پایتون نوشتم که بتونیم به پست‌های دیوار (آگهی‌ها) راحت‌تر دسترسی پیدا کنیم، در واقع اطلاعات پست‌ها رو جمع آوری کنیم و همرو یکجا داشته باشیم.

از مزیت‌های بزرگ برنامه آماده استفاده بودن و بی‌نیازی از هر گونه API Key و پیچیدگی‌های خاص برای توسعه دهنده‌هاست.

از مزایای فنی هم اگر بخوام بگم اینکه سعی کردم کاملا Type hinted باشه و مدل‌بیس، تا فقط با آبجکت‌های از قبل اماده شده سر و کار داشته باشیم و تا حد زیادی به همه نکات و استانداردها توجه کردم.

حالا چه کاربردهایی داره؟ (چیزایی که به ذهنم میرسه)

  • مورد اول اینکه میشه دیتاست جمع کرد مخصوصا برای دوستانی که در حوزه AI کار میکنند.

  • مورد دوم میشه ازش در زمینه اتوماسیون برای یافتن آگهی‌های خاص استفاده کرد.


مثال‌های استفاده:

فرض کنید من هزارتا آگهی اخیر شهر تهران رو نیاز دارم:

from divar import Client app = Client() for post in app.get_posts(place_ids=1, limit=1000): print(post)

متود get_posts یک جنریتور از اشیای Post برمیگردونه که با حلقه میتونیم به اعضای اون دسترسی داشته باشیم.

سه پارامتری که این متود داره:

  • limit: تعداد پست‌هایی که نیاز داریم (اختیاری، پیشفرض 200 پست)

  • place_ids: آیدی شهر یا لیست آیدی شهرهای مورد نظر (اختیاری، پیشفرض تهران)

  • category: دسته‌بندی موردنظر پست‌ها (اختیاری، پیشفرض همه آگهی‌ها)

برای مشاهده اطلاعات placeها و categoryها میتونید از دایرکتوری data فایل‌های json رو ببینید.

همچنین متودهای get_all_places و get_all_categories هم قابل استفاده‌اند.

نمونه یک شئ Post به شرح زیر است:

{ "@type": "Post", "token": "Qa87WexZ", "title": "درحد نو", "description": [ "در حد نو", "۲۰۰,۰۰۰ تومان", "دقایقی پیش در تاکسیرانی" ], "city": { "@type": "City", "id": 1, "name": "تهران", "slug": "tehran", "parent_id": 904, "is_province": false }, "district": "تاکسیرانی", "image_count": 1, "thumbnail_url": "https://s100.divarcdn.com/static/photo/neda/webp_thumbnail/hZqv4fSggQJdyDRFclAVZA/d1fbaae0-dea9-4ce7-b3f0-d594beca7484.webp" }

با استفاده از attributeهای این شئ میشه به اطلاعات دسترسی پیدا کرد:

print(post.token) # -> "Qa87WexZ" print(post.title) # -> "در حد نو" print(post.city.name) # -> "تهران"

حالا بر فرض من میخوام اطلاعات کامل همین پست رو دریافت کنم (همه جزئیات)

full_post = app.get_post(token=post.token) print(full_post)

متود get_post یک شئ PostFull برمیگردونه که مثل همون Post هست منتهی تقریبا همه جزئیات آگهی رو شامل میشه.

پارامتری که این متود داره:

  • token: توکن آگهی (الزامی)

نمونه یک شئ PostFull به شرح زیر است:

{ "@type": "PostFull", "token": "Qa87WexZ", "categories": [ { "@type": "Category", "title": "وسایل شخصی", "slug": "personal" }, { "@type": "Category", "title": "لوازم التحریر", "slug": "stationery" } ], "title": "درحد نو", "publish_date": "2026-05-07 15:48:00", "city": { "@type": "City", "id": 1, "name": "تهران", "slug": "tehran", "parent_id": 904, "is_province": false }, "district": "تاکسیرانی", "data": [ { "@type": "MetaData", "title": "وضعیت", "value": "در حد نو" }, { "@type": "MetaData", "title": "قیمت", "value": "‏۲۰۰,۰۰۰ تومان (مقطوع)" } ], "description": "۲۰۰ تومان هرسه تا۲۰۰", "image_count": 1, "images": [ { "@type": "Image", "url": "https://s100.divarcdn.com/static/photo/neda/webp_post/2tRcdexsxj9lqO7nFngT1A/d1fbaae0-dea9-4ce7-b3f0-d594beca7484.webp", "thumbnail_url": "https://s100.divarcdn.com/static/photo/neda/webp_thumbnail/hZqv4fSggQJdyDRFclAVZA/d1fbaae0-dea9-4ce7-b3f0-d594beca7484.webp", "is_video": false } ] }

در حال حاضر نسخه‌ای که روی گیت‌هاب قرار دادم کاملا پایدار هست (استار فراموش نشه)

شاید بعدا قابلیت نصب با pip رو هم بهش اضافه کنم.

از توجه شما به این موضوع سپاسگزارم :)

اگر پیشنهاد یا ایده‌ای هم بود خوشحال میشم بشنوم یا حتی خودتون یکی از contributorهای این پروژه باشید.

زبان پایتوندیواربرنامه نویسیوب اسکرپینگخزنده وب
۶
۰
Amir
Amir
یک برنامه‌نویس خسته.
شاید از این پست‌ها خوشتان بیاید