ウェブページからすべてのリンクを取得するために、Python 3.3 で Beautifulsoup4 と Soupstrainer を使用しています。以下は、重要なコード スニペットです。
r = requests.get(adress, headers=headers)
for link in BeautifulSoup(r.text, parse_only=SoupStrainer('a')):
if hasattr(link, 'href'):
いくつかのWebページをテストしましたが、非常にうまく機能しますが、今日使用すると
adress = 'http://www.goldentigercasino.de/'
Goldentigercasino.de の例のように、「href」フィールドがない場合でも、hasattr(link, 'href') は常に TRUE を返すことがわかりました。そのため、link ['href'] を使用するのが遅くなったため、単にそこにないため、トラブルが発生しています。
また、次のような回避策も試しました。
test = requests.get('http://www.goldentigercasino.de/')
for link in BeautifulSoup(test.text, parse_only=SoupStrainer('a',{'href': not None})):
Doctypeも返すことを除いて、それは望みどおりに機能します:
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
上記と同じ理由で、これも問題を引き起こしています。
私の質問: hasattr が常に true を返すのはなぜですか?どうすれば修正できますか? また、hasattr で可能性がない場合、DOCTYPE を返さない回避策をどのように修正できますか?
これからもよろしくお願いします!