ValueError:未知网址类型:' url'

时间:2015-06-18 16:38:36

标签: python parsing url

import urllib.request
import urllib.parse
import re           #regular equatuions

url = 'http://pythonprogramming.net/'
values = {'s': 'basics',
      'submit':'search'}        #this is how you search on most websites
data = urllib.parse.urlencode(values)
data= data.encode('utf-8')
req = urllib.request.Request('url', 'data')
resp = urllib.request.urlopen(req)
respData = resp.read()

#print(respData)

paragraphs = re.findall(r'<p>(.*?)</p>', str(respData))                     
for eachP in paragraphs:
    print(eachP)

此代码来自我跟随的视频。我不明白为什么它复制后不起作用。我试图理解错误,但他们确实有道理。网址有效,它是一个真正的网站。以下是我收到的错误消息:

C:\Python34\python.exe "C:/Users/S/PycharmProjects/untitled/Parsing practice.py"
Traceback (most recent call last):
  File "C:/Users/Sean/PycharmProjects/untitled/Parsing practice.py", line 10, in <module>
    req = urllib.request.Request('url', 'data')
  File "C:\Python34\lib\urllib\request.py", line 266, in __init__
    self.full_url = url
  File "C:\Python34\lib\urllib\request.py", line 292, in full_url
    self._parse()
  File "C:\Python34\lib\urllib\request.py", line 321, in _parse
    raise ValueError("unknown url type: %r" % self.full_url)
ValueError: unknown url type: 'url'

我真的不知道这些意思是什么,因为我没有200行代码,只有19行。

1 个答案:

答案 0 :(得分:3)

您传递了字符串 'url',而不是变量:

req = urllib.request.Request('url', 'data')
#                            ^^^^^

这不是公认的网址格式。你打算传入变量(没有引号):

req = urllib.request.Request(url, data)

请注意,您对data执行了同样的操作。

因为您在第10行传递了错误的值(回溯的前两行),所以您在urllib.request模块中更深层次地触发了问题(追溯的剩余行);该模块确实有100行。