Python输入中文的问题
迷茫
迷茫 2017-04-18 09:02:59
0
3
364

我写了一个爬乌云漏洞库的爬虫,其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()

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(3)
伊谢尔伦

L'URL contient des caractères chinois et doit être échappée..
Remplacez la ligne 14 par

url = 'http://www.wooyun.org/corps/' + urllib.quote(corpName)+ '/page/' + str(pageNum)

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 le URL 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 avec URLEncode, 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.

巴扎黑
from urllib import quote

print quote('百度')
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal