python urlib2 调用变量时失败
我正在使用Beautiful Soup抓取数据。我有一系列网址想要逐个处理,所以我需要在urllib2.Request
命令中加入一个变量。当我把变量加到urllib2.Request
里时,出现了这个错误(在urllib2.py的第1240行):
raise URLError('unknown url type: %s' % type)
这是我的代码:
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里,它就能正常工作。就像这样:
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
错误。
webstring = "/DIRECTORY/"+"'"
web1 = """'http://www.caao.org"""+webstring+", None, headers)"
顺便说一下:
我刚开始学Python,想从同一个网站的多个页面抓取数据。上面的代码是让我能遍历我的网址列表,逐个在每个页面上运行我的Beautiful Soup代码。如果有更简单的方法可以遍历网址列表,并使用urllib2.urlopen
打开每个页面,以便我能运行我的抓取代码,请告诉我。
2 个回答
0
你遇到的问题是,你试图把一个字符串当成代码来理解。
urllib
期待的是,当你传入一个字符串时,它应该就是一个字符串。你可能应该这样做:
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
这里的字符串就是你想要的网址,然后你把它传给 urllib2.Request
。
0
你只需要动态生成你的网址,然后把它传给函数就可以了。不要把你想调用的函数用字符串的形式传过去——那样是行不通的。
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