Python 如何修改此脚本以检查HTTP状态(404200)
我目前正在使用下面的脚本加载URL列表,然后检查每个URL的源以获得错误字符串列表。如果在源中未找到错误字符串,则认为URL有效并写入文本文件 如何修改此脚本以检查HTTP状态?如果URL返回404,它将被忽略;如果它返回200,URL将被写入文本文件。任何帮助都将不胜感激Python 如何修改此脚本以检查HTTP状态(404200),python,request,Python,Request,我目前正在使用下面的脚本加载URL列表,然后检查每个URL的源以获得错误字符串列表。如果在源中未找到错误字符串,则认为URL有效并写入文本文件 如何修改此脚本以检查HTTP状态?如果URL返回404,它将被忽略;如果它返回200,URL将被写入文本文件。任何帮助都将不胜感激 import urllib2 import sys error_strings = ['invalid product number', 'specification not available. please conta
import urllib2
import sys
error_strings = ['invalid product number', 'specification not available. please contact customer services.']
def check_link(url):
if not url:
return False
f = urllib2.urlopen(url)
html = f.read()
result = False
if html:
result = True
html = html.lower()
for s in error_strings:
if s in html:
result = False
break
return result
if __name__ == '__main__':
if len(sys.argv) == 1:
print 'Usage: %s <file_containing_urls>' % sys.argv[0]
else:
output = open('valid_links.txt', 'w+')
for url in open(sys.argv[1]):
if(check_link(url.strip())):
output.write('%s\n' % url.strip());
output.flush()
output.close()
导入urllib2
导入系统
错误\u strings=[“产品编号无效”,“规格不可用。请与客户服务部门联系”。]
def检查链接(url):
如果不是url:
返回错误
f=urllib2.urlopen(url)
html=f.read()
结果=错误
如果是html:
结果=真
html=html.lower()
对于错误字符串中的:
如果是html格式:
结果=错误
打破
返回结果
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
如果len(sys.argv)==1:
“打印”用法:%s“%sys.argv[0]
其他:
输出=打开('valid_links.txt','w+'))
对于打开的url(sys.argv[1]):
如果(检查链接(url.strip()):
output.write('%s\n'%url.strip());
output.flush()
output.close()
使用其他一些方法返回一个类似文件的对象,其中一个方法:getcode()
就是您要查找的,只需添加一行:
if f.getcode() != 200:
return False
在相关位置您可以将您的通话稍微更改为:
>>> try:
... f = urllib2.urlopen(url)
... except urllib2.HTTPError, e:
... print e.code
...
404
使用
e.code
,您可以检查它是否在您身上。如果您没有点击除块之外的,您可以像当前一样使用f
。试试这个。你可以用这个
def check_link(url):
if not url:
return False
code = None
try:
f = urllib2.urlopen(url)
code = f.getCode()
except urllib2.HTTPError, e:
code = e.code
result = True
if code != 200:
result = False
return result
或者,如果您只需要维护一个无效代码字符串的列表并对照这些字符串进行检查,它将如下所示
def check_link(url):
if not url:
return False
code = None
try:
f = urllib2.urlopen(url)
code = f.getCode()
except urllib2.HTTPError, e:
code = e.code
result = True
if code in invalid_code_strings:
result = False
return result
这是行不通的。如果您的URL不存在,您的urlopen
会出现异常。使用urlhttp://www.google.com/NOTREAL
注意抛出+1的urllib2.HTTPError
,您是对的。非成功状态代码似乎是通过异常返回的。此方法在404上不起作用。如果你urlopen
一个不存在的站点,它会在你通过这个方法检查代码之前抛出一个异常。对于我自己,我可以在任何地方使用请求
。