私はウェブサイトをクロールし、各ページからリンクを取得する動的な方法を探しています。私はBeauitfulsoupを試してみることにしました。 2つの質問:リンクを検索する入れ子のwhile文を使用して、これをより動的に行うにはどうすればよいですか。私はこのサイトからすべてのリンクを取得したい。しかし、入れ子のwhileループを引き続き入れたいとは思いません。pythonを使ってウェブサイトをクロールする
topLevelLinks = self.getAllUniqueLinks(baseUrl)
listOfLinks = list(topLevelLinks)
length = len(listOfLinks)
count = 0
while(count < length):
twoLevelLinks = self.getAllUniqueLinks(listOfLinks[count])
twoListOfLinks = list(twoLevelLinks)
twoCount = 0
twoLength = len(twoListOfLinks)
for twoLinks in twoListOfLinks:
listOfLinks.append(twoLinks)
count = count + 1
while(twoCount < twoLength):
threeLevelLinks = self.getAllUniqueLinks(twoListOfLinks[twoCount])
threeListOfLinks = list(threeLevelLinks)
for threeLinks in threeListOfLinks:
listOfLinks.append(threeLinks)
twoCount = twoCount +1
print '--------------------------------------------------------------------------------------'
#remove all duplicates
finalList = list(set(listOfLinks))
print finalList
私の2番目の質問は、私がサイトからすべてのリンクを取得したかどうかを知るためにとにかくあります。私を許してください、私はPython(1年かそれ以上)にいくぶん新しく、私はいくつかのプロセスとロジックが幼稚であるかもしれないことを知っています。しかし、何とか学ばなければならない。主に私はちょうどこれをより動的に入れ子にしたwhileループを使ってやりたいと思っています。あらゆる洞察力に感謝します。
なぜドンすべてのリンクのアキュムレータとして1つの配列を使用して、それからサイトの詳細を見つけるときにそれらをキューに入れるだけですか? –
よかったです。どのように私はより多くを見つけることを続けますか。上記のコードは、ページツリー内の3つのレベルだけ下に移動します。私はこれをより動的にして入れ子にしたいときにループを入れたいです。 – hackthisjay
あなたは入れ子にする必要はありません。ページのhtmlを一度実行し、すべてのリンクの配列を持ちます。次のリンクに進みます。その場合、なぜ再帰関数を使用しないのですか?最終的にはスタックがオーバーフローしますが、Webは大きくなります:O –