2017-03-05 3 views
0

こんにちは皆さん、もう一度、pythonのnoobはここに。 私は自分のプロジェクトでゆっくりと進んでいますが、1つのバグを修正すると別の問題が発生しました。かいつまん: は私は私はhrefの値を見つけることができます美しいsoup.find_allの値が空であることを確認してください

for tempNext in soup3.find_all(title=re.compile("^Next Page -")):

..loopを持っています。価値があるなら、それは素晴らしい作品です。そうでなければ、前回と同じものを再利用し続けます。残念ながら、このforループも別のループ内にあるので、毎回値を""にリセットするのは簡単ではありません。

JUSTアイデアを得るために、これはスニペットがどのように見えるかです:

soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + link) 
     while tempNumber < 4: 
      for postScrape in soup3.find_all(id=re.compile("^td_post_")): 
       post = "" 
       post += postScrape.get_text(strip=True) 
       postData += post + "\n" 
       print(post) 
      for tempNext in soup3.find_all(title=re.compile("^Next Page -")): 
       tempNextPage = "" 
       tempNextPage += (tempNext.get('href')) 
       print(tempNextPage) 
      soup3 = "" 
      soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage) 
      tempNumber += 1 
     tempNumber = 1 
    number += 1 
    print(number) 
    newUrl = "http://www.automotiveforums.com/vbulletin/" + nextPage 
    soup = make_soup(newUrl) 

は、それが空の場合for tempNext in soup3.find_all(title=re.compile("^Next Page -")):値をチェックする方法があったのであれば、私は思っていた、そしてそれがあれば、ちょうどしかしtempNextPage = ""設定私はそれを理解することができない最後のカップルの時間のために。

ループが完了した後に空の値に設定すると、他のページを掻き取ることはありません。

この質問を読んでいただきありがとうございました。ご意見をいただければ幸いです。

答えて

1

Declareまたは変数の外部に変数を割り当て、ループにforループ内の新しい値を追加する代わりに新しい値に変数を割り当てます。 soup3.find_all()は、任意の一致する要素が見つからなかった場合は、この方法では、tempNextPageの値は空のままだろうと、あなたはtempNextPageが空であるかどうかに基づいて行動を取ることができます。

while tempNumber < 4: 
    tempNextPage = "" 
    for postScrape in soup3.find_all(id=re.compile("^td_post_")): 
     .... 
    for tempNext in soup3.find_all(title=re.compile("^Next Page -")): 
     tempNextPage = tempNext.get('href') 
     print(tempNextPage) 

    # process tempNextPage only if it is not empty 
    if not tempNextPage: 
     soup3 = make_soup('http://www.automotiveforums.com/vbulletin/' + tempNextPage) 
     .... 
    # do something else otherwise 
    else : 
     .... 
+0

ニース1、おかげでたくさんの私クラスタを通して見ているため。実際にはFORループの外でリセットするだけで十分でしたが、チェックを付け加えれば、soup3.find_allのエラーメッセージが表示されます。しかし、それがなければ、それはうまく動作し、まだ大規模なネストされたループでそれを持っていない方法を考え出すが、絶対に今のところ動作します。ありがとうございました! – Norbis

関連する問題