我写了一个爬乌云漏洞库的爬虫,其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()
URL mengandungi aksara Cina dan perlu dilepaskan..
Gantikan baris 14 dengan
Terminal Ubuntu Gnome telah berjaya diuji (Baidu)
Saya rasa ini bukan masalah pengekodan aksara Bagaimanakah aksara Cina boleh muncul secara langsung dalam
URL
? Jangan fikir apabila penyemak imbas memaparkan:http://www.wooyun.org/corps/公司名称/page/1
, anda fikirURL
dalam公司名称
yang diminta oleh penyemak imbas adalah benar-benar aksara Cina.Malah, apabila penyemak imbas membuat permintaan, semua aksara Cina dalam
URL
akan ditukar denganURLEncode
dan tiada aksara Cina dalam permintaan sebenar.Seperti yang anda minta:
http://www.wooyun.org/corps/阿里巴巴/page/1
, ini tidak akan berjaya.Tetapi jika anda menulis URL sebagai:
http://www.wooyun.org/corps/阿里巴巴/page/1
, anda boleh berjaya meminta halaman Alibaba.