我写了一个爬乌云漏洞库的爬虫,其URL形式为http://www.wooyun.org/corps/公司名称/page/1,程序最后raw_input处输入公司名称即可跑出该公司的漏洞。现在的问题是中文编码的问题没解决好,如果公司的名称是英文如RiSing就可以,如果是中文就报错。求各位大大指点
# coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import urllib import urllib2 import re def getPage(pageNum): try: url = 'http://www.wooyun.org/corps/' + corpName + '/page/' + str(pageNum) request = urllib2.Request(url) response = urllib2.urlopen(request) return response.read().decode('utf-8') except urllib2.URLError, e: if hasattr(e,u"reason"): print u"error",e.reason return None def getContent(page): pattern = re.compile('.*?(.*?) .*?(.*?) ',re.S) items = re.findall(pattern,page) for item in items: print item[0],'http://www.wooyun.org'+item[1],item[2] def getPageNum(page): pattern = re.compile('
网址含中文要转义..
把14行换成
Ubuntu Gnome Terminal 已经测试(百度)成功
我觉得估计不是字符编码的问题,
URL
里怎么能直接出现汉字?你不要以为浏览器里显示:http://www.wooyun.org/corps/公司名称/page/1
你就觉得浏览器请求的URL
里面的公司名称
就真是汉字。事实上浏览器去请求的时候,
URL
里的汉字全都会用URLEncode
转一下的,真正的请求里没有汉字的。就像你请求:
http://www.wooyun.org/corps/阿里巴巴/page/1
,这是不会成功的。但你把URL写成:
http://www.wooyun.org/corps/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/page/1
,你可以成功请求到阿里巴巴的页面。