首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用urllib2 - diacritics打开页面

使用urllib2 - diacritics打开页面
EN

Stack Overflow用户
提问于 2014-09-09 14:04:05
回答 3查看 143关注 0票数 2

我试图使用urllib2打开多个页面。问题是有些页面不能打开。它返回urllib2.HTTPerror: HTTP Error 400: Bad Request

我从另一个网页中得到这个页面的参考文件(页面的顶部是charset = "utf-8")。只有当我试图在url中打开包含“č‘,’ž”或“ř”的页面时,才会返回错误。

以下是代码:

代码语言:javascript
复制
def getSoup(url):
    req = urllib2.Request(url)

    response = urllib2.urlopen(req)
    page = response.read()
    soup = BeautifulSoup(page, 'html.parser')
    return soup




hovienko = getSoup("http://www.hovno.cz/hovna-az/a/1/")
lis = hovienko.find("div", class_="span12").find('ul').findAll('li')

for liTag in lis:

    aTag = liTag.find('a')['href']
    href = "http://www.hovno.cz"+aTag  """ hrefs, I'm trying to open using urllib2 """
    soup = getSoup(href.encode("iso-8859-2")) """ here occures errors when 'č','ž' or 'ř' in url """

有人知道我该怎么做才能避免错误吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-09 16:17:09

解决办法很简单。我应该使用used 2.引号()。

编辑代码:

代码语言:javascript
复制
for liTag in lis:

    aTag = liTag.find('a')['href']
    href = "http://www.hovno.cz"+urllib2.quote(aTag.encode("utf-8"))
    soup = getSoup(href)
票数 1
EN

Stack Overflow用户

发布于 2014-09-09 14:29:51

这个网站是UTF-8。为什么需要href.encode("iso-8859-2")?我已经从http://programming-review.com/beautifulsoasome-interesting-python-functions/获取了下一个代码

代码语言:javascript
复制
    import urllib2
    import cgitb
    cgitb.enable()
    from BeautifulSoup import BeautifulSoup
    from urlparse import urlparse

# print all links
def PrintLinks(localurl):
    data = urllib2.urlopen(localurl).read()
    print 'Encoding of fetched HTML : %s', type(data)
    soup = BeautifulSoup(data)
    parse = urlparse(localurl)
    localurl = parse[0] + "://" + parse[1]
    print "<h3>Page links statistics</h3>"
    l = soup.findAll("a", attrs={"href":True})
    print "<h4>Total links count = " + str(len(l)) + '</h4>'
    externallinks = [] # external links list
    for link in l:
    # if it's external link
        if link['href'].find("http://") == 0 and link['href'].find(localurl) == -1:
            externallinks = externallinks + [link]
    print "<h4>External links count = " + str(len(externallinks)) + '</h4>'


    if len(externallinks) > 0:
        print "<h3>External links list:</h3>"
        for link in externallinks:
          if link.text != '':
            print '<h5>' + link.text.encode('utf-8')
            print ' => [' + '<a href="' + link['href'] + '" >' + link['href'] + '</a>' +  ']' + '</h5>'
          else:
            print '<h5>' + '[image]',
            print ' => [' + '<a href="' + link['href'] + '" >' + link['href'] + '</a>' +  ']' + '</h5>'


PrintLinks( "http://www.zlatestranky.cz/pro-mobily/")
票数 1
EN

Stack Overflow用户

发布于 2014-09-09 14:23:13

这里有几件事。

首先,您的URI不能包含非ASCII。你得换掉它们。参见:如何用Python urlopen获取非ascii url?

其次,为自己省下一个痛苦的世界,并将请求用于HTTP内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25746668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档