给定格式为XXXXX.com的网站列表,我想检查某个网站是否存在,其中XXXXX = 5位数字。因此,我想浏览从00000到99999,看看是否存在这些网站的变体。
我想做
import requests
request = requests.get('http://www.example.com')
if request.status_code == 200:
print('Web site exists')
else:
print('Web site does not exist')
但是生成某种列表(甚至只是将列表导出到csv),因此对于每个URL,我知道它是否存在。
任何建议都会很棒!
答案 0 :(得分:0)
尝试在循环中结合使用xrange
和字符串zfill
方法。
import requests
def test_for_200(url):
req = requests.get(url)
return req.status_code == 200
def numbers():
for n in xrange(100000):
yield str(n).zfill(5)
results = {}
for num in numbers():
url = "http://{}.com".format(num)
results[num] = test_for_200(url)
results
看起来像这样:
>>> results
{'00000': True, '00001': False, ...}
答案 1 :(得分:0)
我将假设您有大量的URL,并且希望从某个源文件(例如文本文件)中读取它们,而不是在Python文件中硬编码大量的URL。 , 对。如果是这种情况,请运行以下脚本,您将获得所需的内容。
import urllib.request
import urllib.error
import time
from multiprocessing import Pool
start = time.time()
file = open('C:\\your_path\\check_me.txt', 'r', encoding="ISO-8859-1")
urls = file.readlines()
print(urls)
def checkurl(url):
try:
conn = urllib.request.urlopen(url)
except urllib.error.HTTPError as e:
# Return code error (e.g. 404, 501, ...)
# ...
print('HTTPError: {}'.format(e.code) + ', ' + url)
except urllib.error.URLError as e:
# Not an HTTP-specific error (e.g. connection refused)
# ...
print('URLError: {}'.format(e.reason) + ', ' + url)
else:
# 200
# ...
print('good' + ', ' + url)
if __name__ == "__main__":
p = Pool(processes=20)
result = p.map(checkurl, urls)
print("done in : ", time.time()-start)