我正在使用漂亮的汤来报废数据。我有一个网址列表,我想循环我的代码,所以我需要在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的新手,我试图从同一网站的多个页面中抓取数据。上面的代码是让我运行我的URL列表,在每个页面上运行我漂亮的汤代码。如果有一种更简单的方法来遍历URL列表并使用urllib2.urlopen
打开每个页面以便我可以运行我的抓取代码,请告诉我。
答案 0 :(得分:0)
动态构建您的URL,然后将其传递给函数。不要传递你想要调用的函数的字符串表示 - 这是行不通的。
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
答案 1 :(得分: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