Python 如何修改此脚本以检查HTTP状态(404200)

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

我目前正在使用下面的脚本加载URL列表,然后检查每个URL的源以获得错误字符串列表。如果在源中未找到错误字符串,则认为URL有效并写入文本文件

如何修改此脚本以检查HTTP状态?如果URL返回404,它将被忽略;如果它返回200,URL将被写入文本文件。任何帮助都将不胜感激

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
会出现异常。使用url
http://www.google.com/NOTREAL
注意抛出+1的
urllib2.HTTPError
,您是对的。非成功状态代码似乎是通过异常返回的。此方法在404上不起作用。如果你
urlopen
一个不存在的站点,它会在你通过这个方法检查代码之前抛出一个异常。对于我自己,我可以在任何地方使用
请求