首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用变量时python urlib2失败

调用变量时python urlib2失败
EN

Stack Overflow用户
提问于 2013-01-24 20:24:36
回答 2查看 1.2K关注 0票数 0

我正在用漂亮的汤来报废数据。我有一个要循环我的代码的urls列表,所以我需要在urllib2.Request命令中包含一个变量。当我向urllib2.Request添加一个变量时,我得到了这个错误(urllib2.py的第1240行):

代码语言:javascript
复制
raise URLError('unknown url type: %s' % type)

这是我的代码:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import urllib2

webstring = "/DIRECTORY/"+"'"  
webfull = "urllib2.Request('http://www.caao.org"+webstring+", None, headers)"

print webfull

#webfull prints: urllib2.Request('http://www.caao.org/DIRECTORY/', None, headers)

headers = { 'User-Agent' : 'Mozilla/5.0' }
html = urllib2.urlopen(webfull).read()
soup = BeautifulSoup(html)

print soup

变量webfull输出正确的代码。我可以把它剪切并粘贴到urlopen中,它会工作的。就像这样:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import urllib2

headers = { 'User-Agent' : 'Mozilla/5.0' }
html = urllib2.urlopen(urllib2.Request('http://www.caao.org/DIRECTORY/', None, headers)).read()
soup = BeautifulSoup(html)

print soup

我尝试使用多个网站作为测试,我也尝试在某些字符串上使用三重双引号(如下面所示),但我总是得到相同的unknown url type错误。

代码语言:javascript
复制
webstring = "/DIRECTORY/"+"'"
web1 = """'http://www.caao.org"""+webstring+", None, headers)"

作为附带说明:

我对python很陌生,我试图从同一个网站中的多个页面中抓取数据。上面的代码是让我在每个页面上运行我漂亮的汤代码的URL列表。如果有更简单的方法循环遍历URL列表,并使用urllib2.urlopen打开每个页面,以便我可以运行我的刮取代码,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-24 20:30:17

只需动态地构造您的URL,然后将其传递给函数。不要传递您想要调用的函数的字符串表示形式--这是行不通的。

代码语言:javascript
复制
from bs4 import BeautifulSoup
import urllib2

headers = { 'User-Agent' : 'Mozilla/5.0' }

webstring = "/DIRECTORY/"
url = "http://www.caao.org"+webstring

html = urllib2.urlopen(urllib2.Request(url, None, headers)).read()
soup = BeautifulSoup(html)

print soup
票数 0
EN

Stack Overflow用户

发布于 2013-01-24 20:30:33

您在这里遇到的问题是,您试图将字符串解释为一段代码。

urllib期望的是,当您传入一个字符串时,它将是一个字符串。你应该做的是:

代码语言:javascript
复制
from bs4 import BeautifulSoup
import urllib2

webstring = "/DIRECTORY/" 
url = "http://www.caao.org"+webstring

headers = { 'User-Agent' : 'Mozilla/5.0' }
html = urllib2.urlopen(urllib2.Request(url, None, headers)).read()
soup = BeautifulSoup(html)

print soup

其中的字符串就是您想要的url,然后将它传递到urllib2.Request中。

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

https://stackoverflow.com/questions/14510066

复制
相关文章

相似问题

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