यदि डोमेन मौजूद है तो जल्दी से कैसे जांचें? [डुप्लिकेट]

Nov 26 2020

मेरे पास डोमेन की एक बड़ी सूची है और मुझे यह जांचने की आवश्यकता है कि क्या डोमेन अब उपलब्ध हैं। मैं इसे इस तरह से करता हूं:

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} [---]')

लेकिन जांच बहुत धीमी है। क्या इसे तेजी से बनाने का कोई तरीका है? शायद किसी को अस्तित्व के लिए डोमेन की जांच के लिए एक वैकल्पिक विधि पता है?

जवाब

1 saradartur Nov 26 2020 at 01:55

यदि आप जांचना चाहते हैं कि कौन से डोमेन उपलब्ध हैं, तो अधिक सही तरीका मॉड्यूल 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)
David Nov 26 2020 at 00:26

आप जो भी कर सकते हैं वह स्क्रिप्ट को कई बार चला सकता है, लेकिन इसे त्वरित बनाने के लिए प्रत्येक के लिए सीमित मात्रा में डोमेन जोड़ें।

Mr.lindroid Nov 26 2020 at 00:42

आप " अनुरोध-वायदा " मॉड्यूल के माध्यम से कर सकते हैं । अनुरोध-वायदा एसिंक्रोनस रूप से चलता है, यदि आपके पास औसत इंटरनेट कनेक्शन है तो यह 8-10 url प्रति सेकंड (मेरे अनुभव के आधार पर) की जांच कर सकता है।

AssadAli Nov 26 2020 at 02:30

स्क्रैपी का उपयोग करें यह तेजी से रास्ता है और डिफ़ॉल्ट रूप से यह केवल 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 फ़ाइल

अधिक देखने के लिए

cleder Nov 29 2020 at 18:45

यदि किसी डोमेन में 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
>>>