लेखक
Aditya Sundar - Waseda University
सारांश
यो परियोजनाले sitemap उपलब्धताको पर्वाह नगरी व्यवस्थित रूपमा websites अन्वेषण गर्न र व्यापक URL सूचीहरू उत्पन्न गर्न डिजाइन गरिएको web crawler विकास गर्दछ। Crawler ले static र dynamic दुवै content ह्यान्डल गर्दछ, बाह्य references ट्र्याक गर्दछ, र सीमित hardware मा कुशलतापूर्वक सञ्चालन गर्दछ।
मुख्य क्षमताहरू:
- Configurable concurrency को साथ Asynchronous crawling
- व्यवस्थित coverage को लागि BFS-आधारित URL खोज
- बाह्य reference ट्र्याकिङ र विश्लेषण
- Playwright मार्फत Dynamic content समर्थन
- SQLite-आधारित persistent storage
1. परिचय
Web crawling ले स्वचालित प्रणालीहरूलाई websites browse गर्न र डाटा सङ्कलन गर्न सक्षम बनाउँछ। Sitemaps ले structured URL सूचीहरू प्रदान गर्दा, सबै websites मा तिनीहरू हुँदैनन्। यो crawler:
- Sitemaps भएको वा नभएको sites मा काम गर्दछ
- बाह्य sitemaps उत्पन्न गर्दछ (अन्य domains reference गर्ने URLs)
- Proxies बिना low-spec hardware मा चल्छ
- ठूला-स्तरका websites कुशलतापूर्वक ह्यान्डल गर्दछ
2. विधि
2.1 Technology Stack
| Technology | उद्देश्य |
|---|
| Python | प्राथमिक भाषा |
| aiohttp | Asynchronous HTTP अनुरोधहरू |
| BeautifulSoup | HTML parsing र link extraction |
| asyncio | Concurrent code execution |
| SQLite | Persistent URL storage |
| Playwright | Dynamic content rendering |
| fake_useragent | Bot detection बच्ने |
2.2 Crawler Workflow
- Initialization: Start URL normalize गर्ने, robots.txt जाँच गर्ने, database tables सिर्जना गर्ने
- URL Fetching: Delays को साथ Asynchronous batch अनुरोधहरू
- Link Extraction: Anchor tags parse गर्ने, URLs normalize गर्ने
- Data Storage: URLs, errors, बाह्य domains को लागि SQLite
- Concurrency: Configurable limit (default: 100 concurrent)
- Completion: नयाँ URLs नभएपछि वा limit पुगेपछि रोक्ने
2.4 BFS Algorithm
Crawler ले URLs अन्वेषण गर्न Breadth-First Search प्रयोग गर्दछ:
- गहिरो जानु अघि हालको depth मा सबै URLs प्रशोधन गर्दछ
- Level by level व्यवस्थित coverage सुनिश्चित गर्दछ
- Interrupted भएमा पुनः सुरु गर्न अनुमति दिन्छ
3. परिणामहरू
3.1 Crawling तथ्याङ्कहरू
| Website प्रकार | आन्तरिक URLs | बाह्य References |
|---|
| मनोरञ्जन Site 1 | 47,870 | 7,010,999 |
| Gaming Site 2 | 143,058 | 3,027,460 |
| Press Release Site | 99,243 | 2,136,887 |
| समाचार Site 6 | 117,164 | 1,895,515 |
| सरकारी Site 1 | 28,841 | 55,700 |
| शिक्षा Site 1 | 50,458 | 28,328 |
कुल:
- आन्तरिक URLs: 1,121,407
- बाह्य References: 18,957,040
मनोरञ्जन/समाचार sites मा सरकारी sites भन्दा धेरै उच्च बाह्य reference ratios छन्, विभिन्न content रणनीतिहरू प्रतिबिम्बित गर्दै।
3.3 SEO Insights
- Media sites: उच्च बाह्य reference ratio ले विश्वसनीयता बढाउन सक्छ
- सरकारी sites: आन्तरिक linking मा फोकस उपयुक्त छ
- धेरैजसो sites को लागि सन्तुलित दृष्टिकोण सिफारिस गरिन्छ
4. Optimizations
Rate Limiting
connector = aiohttp.TCPConnector(limit=100) # समायोजन योग्य
कम limits ले 429 errors रोक्छ तर crawling ढिलो हुन्छ।
Dynamic Content (SPAs)
Playwright ले JavaScript-rendered content ह्यान्डल गर्दछ।
5. भविष्यका दिशाहरू
- Proxy समर्थन: IP blocking जोखिम घटाउने
- राम्रो hardware: ठूला crawls ह्यान्डल गर्ने
- Scrapy एकीकरण: बलियो framework features को फाइदा लिने
- Graph विश्लेषण: Embeddings प्रयोग गरेर website सम्बन्धहरू map गर्ने
सन्दर्भहरू
- aiohttp - Python को लागि Asynchronous HTTP client/server
- BeautifulSoup - HTML/XML parsing library
- Playwright - Browser automation framework
- SQLite - Lightweight database engine