我写了一个爬乌云漏洞库的爬虫,其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('<tr>.*?<th><a href="#">(.*?)</a></th>.*?<td><a href="(.*?)">(.*?)</a></td>',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('<p class="page">(.*?)<a',re.S)
items = re.findall(pattern,page)
text=items[0]
text=str(text)
m = re.findall('\d+',text)
PageNum=m[1]
return PageNum
def getResultNum(page):
pattern = re.compile('<p class="page">(.*?)<a',re.S)
items = re.findall(pattern,page)
text=items[0]
text=str(text)
m = re.findall('\d+',text)
ResultNum=m[0]
return ResultNum
def getAll():
page = getPage(1)
pageNum=getPageNum(page)
resultNum=getResultNum(page)
print u"查找到结果共" + str(pageNum) + u"页。"
for i in range(1, int(pageNum)+1):
print '==========================',u"正在写入第" + str(i) + u"页数据",'=========================='
page = getPage(i)
getContent(page)
print u"读取结束,共写入" + str(resultNum) + "条数据。"
corpName = raw_input("请输入公司的名字:".decode('utf-8').encode('gbk'))
getAll()
L'URL contient des caractères chinois et doit être échappée..
Remplacez la ligne 14 par
Le terminal Ubuntu Gnome a été testé avec succès (Baidu)
Je ne pense pas que ce soit un problème d'encodage des caractères. Comment les caractères chinois peuvent-ils apparaître directement dans
URL
? Ne pensez pas que lorsque le navigateur affiche :http://www.wooyun.org/corps/公司名称/page/1
, vous pensez que leURL
dans le公司名称
demandé par le navigateur est en réalité un caractère chinois.En fait, lorsque le navigateur fait une requête, tous les caractères chinois de
URL
seront convertis avecURLEncode
, et il n'y a aucun caractère chinois dans la vraie requête.Comme vous l'avez demandé :
http://www.wooyun.org/corps/阿里巴巴/page/1
, cela n'aboutira pas.Mais si vous écrivez l'URL sous la forme :
http://www.wooyun.org/corps/阿里巴巴/page/1
, vous pouvez demander avec succès la page Alibaba.