1

約 21 個の URL を含むサイトマップがあり、これらの各 URL にはさらに約 2000 個の URL が含まれています。元の 21 個の URL をそれぞれ解析し、それらに含まれる 2000 個の URL を取得してリストに追加できるようなものを作成しようとしています。

これを機能させようとして、数日間壁に頭をぶつけてきましたが、「なし」のリストを返し続けています。私は python を使ってまだ 3 週間しか経っていないので、本当に明らかな何かを見落としているかもしれません。どんな助けでも素晴らしいでしょう!

storage = []
storage1 = []

for x in range(21):
url = 'first part of the url' + str(x) + '.xml'
storage.append(url)

def parser(any):
    tree = ET.parse(urlopen(any))
    root = tree.getroot()
    for i in range(len(storage)):
        x = (root[i][0]).text
        storage1.append(x)

storage2 = [parser(x) for x in storage]

また、カウンターで while ループを使用してみましたが、最初の 2000 の URL の後で常に停止しました。

4

4 に答える 4

1

私があなたの問題を正しく理解していれば、あなたのプログラムには 2 つの段階があります。

  1. 21 個の URL の初期リストを生成します
  2. これらの URL ごとにページを取得し、そのページから追加の URL を抽出します。

最初のステップは次のようになります。

initial_urls = [('http://...%s...' % x) for x in range(21)]

次に、ページから URL の大きなリストを作成するには、次のようにします。

big_list = []

def extract_urls(source):
    tree = ET.parse(urlopen(any))
    for link in get_links(tree):
        big_list.append(link.attrib['href'])

def get_links(tree):
    ... - define the logic for link extraction here

for url in initial_urls:
    extract_urls(url)

print big_list

ドキュメントからリンクを抽出する手順を自分で作成する必要があることに注意してください。

お役に立てれば!

于 2013-06-17T18:11:53.487 に答える
1

Python で関数の return を宣言しない場合、自動的に が返されますNone。内部parserでは に要素を追加していますがstorage1、何も返していません。代わりにこれを試してみます。

storage = []

for x in range(21):
    url = 'first part of the url' + str(x) + '.xml'
    storage.append(url)

def parser(any):
    storage1 = []
    tree = ET.parse(urlopen(any))
    root = tree.getroot()
    for i in range(len(storage)):
        x = (root[i][0]).text
        storage1.append(x)
    return storage1

storage2 = [parser(x) for x in storage]

編集:アンバーが言ったように、すべての要素が実際に に格納されていることも確認する必要がありますstorage1

于 2013-06-17T18:04:22.893 に答える
0

パーサー関数で storage1 を返す必要があります

def parser(any):
    tree = ET.parse(urlopen(any))
    root = tree.getroot()
    for i in range(len(storage)):
        x = (root[i][0]).text
        storage1.append(x)
    return storage1

これがあなたの望むものだと思います。

于 2013-06-17T18:08:38.033 に答える