i want to scrape a website with a german umlaut in the url. Here is my code in python 3.3, that works very fine without any umlauts.
def numResults(keyword):
try:
page_google = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=' +keyword
print(page_google)
req_google = Request(page_google)
req_google.add_header('User Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1')
html_google = urlopen(req_google).read()
soup = BeautifulSoup(html_google)
except URLError as e:
print(e)
return soup
But when i request something like:
print(numResults('älterer'))
i get the following error because urllib cannot handle the umlaut i guess:
Traceback (most recent call last):
File "C:\Users\zwieback86\Desktop\programming\scrape.py", line 137, in <module>
print(numResults('älterer'))
File "C:\Users\zwieback86\Desktop\programming\scrape.py", line 73, in numResults
html_google = urlopen(req_google).read()
File "c:\python33\lib\urllib\request.py", line 156, in urlopen
return opener.open(url, data, timeout)
File "c:\python33\lib\urllib\request.py", line 469, in open
response = self._open(req, data)
File "c:\python33\lib\urllib\request.py", line 487, in _open
'_open', req)
File "c:\python33\lib\urllib\request.py", line 447, in _call_chain
result = func(*args)
File "c:\python33\lib\urllib\request.py", line 1268, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "c:\python33\lib\urllib\request.py", line 1248, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "c:\python33\lib\http\client.py", line 1061, in request
self._send_request(method, url, body, headers)
File "c:\python33\lib\http\client.py", line 1089, in _send_request
self.putrequest(method, url, **skips)
File "c:\python33\lib\http\client.py", line 953, in putrequest
self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 38: ordinal not in range(128)
When i type in the adress "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=älterer" into the browser i get the wanted page.
So i assume urllib cannot handle requests with umlauts in the url. But how can i fix it that it will accept the german umlauts? To change the umlauts like ä -> ae is not an option.
Many thanks and regards!