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

テストとして複数の Web サイトを使用してみました。また、特定の文字列に三重引用符 (以下のように) を使用しようとしましたが、常に同じunknown url typeエラーが発生します。

webstring = "/DIRECTORY/"+"'"
web1 = """'http://www.caao.org"""+webstring+", None, headers)"

補足として:

私はPythonが初めてで、同じWebサイト内の複数のページからデータをスクレイピングしようとしています. 上記のコードは、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 に答える