0

我正在使用漂亮的汤来抓取数据。我有一个要循环代码的 url 列表,因此我需要在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打开每个页面以便我可以运行我的抓取代码,请告诉我。

4

2 回答 2

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
于 2013-01-24T20:30:17.587 回答
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

字符串就是你想要的url,然后你把它传递给urllib2.Request

于 2013-01-24T20:30:33.477 回答