Edlin
Edlin

Reputation: 301

urllib2.urlopen raise urllib2.URLError

I'm doing a easy work to get the page of "http://search.jd.com/Search?keyword=%E5%A5%87%E7%9F%B3&enc=utf-8"

so my python code is:

# -*- coding: utf-8 -*-
import sys, codecs
import urllib, urllib2

url = "http://search.jd.com/Search?keyword=%E5%A5%87%E7%9F%B3&enc=utf-8"
print url

page=urllib2.urlopen(url).read()
print page

however I get

Traceback (most recent call last):
  File "tmp.py", line 15, in <module>
    page=urllib2.urlopen(url).read()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1214, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1184, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [Errno 8] nodename nor servname provided, or not known>

can anyone tell me what's going on?

many thanks!

Upvotes: 3

Views: 7968

Answers (3)

Kshitiz Sharma
Kshitiz Sharma

Reputation: 11

It's network issue, please be sure you are on a proper internet connection.

Upvotes: 1

user3446151
user3446151

Reputation: 169

Your codes working fine for me too.

But the error could occur in case, the url has some characters like "+=#" it would then require

s = "http://search.jd.com/Search?keyword=%E5%A5%87%E7%9F%B3&enc=utf-8"
my_url = urllib2.quote(s.encode("utf8"))
page=urllib2.urlopen(my_url).read()
print page

Alternatively you could use requests.

response =requests.post(url)
print response.content 

or

print response.text

Upvotes: 1

ast
ast

Reputation: 555

Sounds like it might be a network issue. Check that you have a consistent internet connection (e.g. by pinging an appropriate server continuously as you run the tests). Just ran the code you post and worked perfectly fine for me.

Upvotes: 1

Related Questions