2010年03月20日 星期六 16:45
最近在写一个测试http://wap.i2m.cn这个wap导航网站上链接是否有坏连的脚本,我在网上搜了一下并仿照着写了下面这个: import HTMLParser from sgmllib import SGMLParser import httplib,urllib,urllib2,urlparse #解析指定的网页的html,得到该页面的超链接列表 class URLLister(SGMLParser): def reset(self): SGMLParser.reset(self) self.urls = [] def start_a(self,attrs): href = [v for k,v in attrs if k=='href'] if href: self.urls.extend(href) #遍历超链接列表,并逐个的发送请求,判断接收后的代码,200为正常,其他为不正常 def fetch(host): usock = urllib.urlopen(host) parser = URLLister() parser.feed(usock.read()) uhost = urlparse.urlparse(host) for url in parser.urls: up = urlparse.urlparse(url) #因为超链接有两种方式:一种是直接的http://...... 一种是相对路径,/.../sample.html所以要分别处理 #UP的值:ParseResult(scheme='http', netloc='3g.sina.com.cn', path='/3g/news/index.php', params='', query='sa=t124d13098v84&vt;=1&pos;=1', fragment='') #netloc是域名 if up.netloc == "": http = httplib.HTTP(uhost.netloc) http.putrequest("GET","/"+up.path+"?"+up.params+up.query+up.fragment) http.putheader("Accept", "*/*") http.endheaders() else: http = httplib.HTTP(uhost.netloc) http.putrequest("GET", up.path+"?"+up.params+up.query+up.fragment) http.putheader("Accept", "*/*") http.endheaders() errcode, errmsg, headers = http.getreply() if errcode == 200: print url,":测试成功!" else: print url,":",errcode #测试 fetch("http://i2m.cn/") 现在遇到问题如下: 1.http = httplib.HTTP()这个方法是否和HTTPConnection.connect ()一样,我在网上查了下包裹python的官方文档,没看到这个方法 2.现在这个脚本只能测试主页上面的链接,没有对二级子页面进行测试,或者复杂点,如果说还有三级或者四级子页面,我要怎么做才能让程序自动进入下一级页面进行测试直到没有更低的子页面 3.现在这个脚本测试指向站内的连接时返回200,正常,但测试指向站外的链接时返回302,我现在知道需要在返回302时,继续取得他的header头里的网址进行测试才行,但具体怎么做没有思路 那位大神有时间的,来指导我一下啊,或者给点思路或者帮我完善下什么的,谢谢了!
Zeuux © 2024
京ICP备05028076号