Python 使用urllib2打开页面-变音符号

Python 使用urllib2打开页面-变音符号,python,html,urllib2,Python,Html,Urllib2,我正在尝试使用urllib2打开多个页面。问题是有些页面无法打开。它返回urllib2.HTTPerror:HTTP错误400:Bad请求 我从另一个网页(页面的头部是charset=“utf-8”)获取此页面的HREF。 只有当我试图打开url中包含“č”、“ž”或“ř”的页面时,才会返回错误 代码如下: def getSoup(url): req = urllib2.Request(url) response = urllib2.urlopen(req) page

我正在尝试使用urllib2打开多个页面。问题是有些页面无法打开。它返回
urllib2.HTTPerror:HTTP错误400:Bad请求

我从另一个网页(页面的头部是charset=“utf-8”)获取此页面的HREF。 只有当我试图打开url中包含“č”、“ž”或“ř”的页面时,才会返回错误

代码如下:

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 """
有人知道我该怎么做才能避免错误吗

谢谢你这里的几件事

首先,URI不能包含非ASCII。你必须更换它们。见此:


第二,为自己省去一个痛苦的世界,使用HTTP工具。

这个网站是UTF-8。为什么需要href.encode(“iso-8859-2”)?我已从中获取下一个代码

导入urllib2
进口cgitb
cgib.enable()
从BeautifulSoup导入BeautifulSoup
从URLPRASE导入URLPRASE
#打印所有链接
def打印链接(本地URL):
data=urllib2.urlopen(localurl.read())
打印“提取的HTML编码:%s”,类型(数据)
汤=美汤(数据)
parse=urlparse(localurl)
localurl=解析[0]+“:/”+解析[1]
打印“页面链接统计信息”
l=soup.findAll(“a”,attrs={“href”:True})
打印“链接总数=”+str(len(l))+“”
外部链接=[]#外部链接列表
对于l中的链接:
#如果是外部链接
如果链接['href'].find('http://')==0和链接['href'].find(localurl)=-1:
外部链接=外部链接+[链接]
打印“外部链接计数=”+str(len(externallinks))+“”
如果len(外部链接)>0:
打印“外部链接列表:”
对于外部链接中的链接:
如果link.text!='':
打印“”+链接.文本.编码('utf-8')
打印'=>['+'+']'+''
其他:
打印“+”[图像],
打印'=>['+'+']'+''
打印链接(“http://www.zlatestranky.cz/pro-mobily/")

解决方案非常简单。我应该使用urllib2.quote()

编辑代码:

for liTag in lis:

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

谢谢你,鲍比,我已经用urllib2.quote()解决了这个问题。您能告诉我使用请求如何帮助我编写代码吗?例如下面的代码。谢谢,请求库有一个更好的API。看看我在说什么。
for liTag in lis:

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