도메인이 있는지 빠르게 확인하는 방법은 무엇입니까? [복제]

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

" requests-futures "모듈 을 통해 그렇게 할 수 있습니다 . requests-futures는 비동기 적으로 실행됩니다. 평균 인터넷 연결이있는 경우 초당 8 ~ 10 개의 URL을 확인할 수 있습니다 (내 경험에 따라).

AssadAli Nov 26 2020 at 02:30

스크래피를 사용하면 훨씬 빠르며 기본적으로 오버 라이딩 할 때까지 200 개의 응답 만 나오므로 귀하의 경우에는 나를 따르십시오

pip install scrapy 

프로젝트 폴더 사용자 터미널에 설치 후 프로젝트 생성

Scrapy startproject projectname projectdir

폴더 이름 projectdir을 생성합니다.

지금

cd projectdir

projectdir 내부 입력

scrapy genspider mydomain mydomain.com

이제 spiders 폴더로 이동하여 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}

이제 projectdir로 돌아가서 실행하십시오.

scrapy crawl mydomain -o output.csv

output.csv 파일에 상태 코드 200이있는 모든 작업 도메인이 있습니다.

자세한 내용 은

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
>>>