यदि डोमेन मौजूद है तो जल्दी से कैसे जांचें? [डुप्लिकेट]
मेरे पास डोमेन की एक बड़ी सूची है और मुझे यह जांचने की आवश्यकता है कि क्या डोमेन अब उपलब्ध हैं। मैं इसे इस तरह से करता हूं:
import requests
list_domain = ['google.com', 'facebook.com']
for domain in list_domain:
result = requests.get(f'http://{domain}', timeout=10)
if result.status_code == 200:
print(f'Domain {domain} [+++]')
else:
print(f'Domain {domain} [---]')
लेकिन जांच बहुत धीमी है। क्या इसे तेजी से बनाने का कोई तरीका है? शायद किसी को अस्तित्व के लिए डोमेन की जांच के लिए एक वैकल्पिक विधि पता है?
जवाब
यदि आप जांचना चाहते हैं कि कौन से डोमेन उपलब्ध हैं, तो अधिक सही तरीका मॉड्यूल ConnectionError
से पकड़ना होगा requests
, क्योंकि भले ही आपको एक प्रतिक्रिया कोड प्राप्त हो 200
, जो नहीं है , इस तथ्य का एक प्रतिक्रिया है कि इसका मतलब है कि सर्वर से जुड़ा है वह डोमेन। इसलिए, डोमेन लिया जाता है।
डोमेन उपलब्धता के लिए जाँच करने के संदर्भ में यह पूर्ण प्रमाण नहीं है, क्योंकि एक डोमेन लिया जा सकता है, लेकिन उसके साथ संबद्ध A रिकॉर्ड उपयुक्त नहीं हो सकता है, या सर्वर केवल समय के लिए डाउन हो सकता है।
नीचे दिया गया कोड अतुल्यकालिक भी है।
from concurrent.futures import ThreadPoolExecutor
import requests
from requests.exceptions import ConnectionError
def validate_existence(domain):
try:
response = requests.get(f'http://{domain}', timeout=10)
except ConnectionError:
print(f'Domain {domain} [---]')
else:
print(f'Domain {domain} [+++]')
list_domain = ['google.com', 'facebook.com', 'nonexistent_domain.test']
with ThreadPoolExecutor() as executor:
executor.map(validate_existence, list_domain)
आप जो भी कर सकते हैं वह स्क्रिप्ट को कई बार चला सकता है, लेकिन इसे त्वरित बनाने के लिए प्रत्येक के लिए सीमित मात्रा में डोमेन जोड़ें।
आप " अनुरोध-वायदा " मॉड्यूल के माध्यम से कर सकते हैं । अनुरोध-वायदा एसिंक्रोनस रूप से चलता है, यदि आपके पास औसत इंटरनेट कनेक्शन है तो यह 8-10 url प्रति सेकंड (मेरे अनुभव के आधार पर) की जांच कर सकता है।
स्क्रैपी का उपयोग करें यह तेजी से रास्ता है और डिफ़ॉल्ट रूप से यह केवल 200 प्रतिक्रिया देता है जब तक आप इसे सवारी नहीं करते हैं ताकि आपके मामले में मेरा अनुसरण करें
pip install scrapy
अपने प्रोजेक्ट फ़ोल्डर उपयोगकर्ता टर्मिनल को क्रिएटिव प्रोजेक्ट में स्थापित करने के बाद
Scrapy startproject projectname projectdir
यह फ़ोल्डर का नाम प्रोजेक्टडिअर बनाएगा
अभी
cd projectdir
इन्ट्रीडायड एंट्री
scrapy genspider mydomain mydomain.com
अब मकड़ियों फ़ोल्डर पर जाएँ mydomain.py खोलें
अब कोड की कुछ लाइनें जोड़ें
import scrapy
class MydomainSpider(scrapy.Spider):
name = "mydomain"
def start_requests(self):
urls = [
'facebook.com',
'Google.com',
]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
yield { ‘Available_Domains’ : response.url}
अब वापस प्रोजेक्टडिअर पर जाएं और चलाएं
scrapy crawl mydomain -o output.csv
आपके पास आउटपुट कोड में सभी काम करने वाले डोमेन होंगे। आउटपुट फ़ाइल .csv फ़ाइल
अधिक देखने के लिए
यदि किसी डोमेन में DNS प्रविष्टि है, तो यह निर्धारित करने के लिए आप सॉकेट लाइब्रेरी का उपयोग कर सकते हैं:
>>> import socket
>>>
>>> addr = socket.gethostbyname('google.com')
>>> addr
'74.125.193.100'
>>> socket.gethostbyname('googl42652267e.com')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.gaierror: [Errno -2] Name or service not known
>>>