他の href リンクで数回繰り返される次の html 部分があります。
<div class="product-list-item margin-bottom">
<a title="titleexample" href="http://www.urlexample.com/example_1" data-style-id="sp_2866">
ここで、クラス「product-list-item」の div タグの直後にある、このドキュメント内のすべての href リンクを取得したいと考えています。Beautifulsoup はかなり新しく、思いついたものは何も機能しませんでした。
アイデアをありがとう。
編集:必ずしも美しいスープである必要はありません。正規表現と python html パーサーで実行できる場合、これも問題ありません。
EDIT2:私が試したこと(私はPythonにかなり慣れていないので、高度な観点からは完全にばかげているかもしれません):
soup = bs4.BeautifulSoup(htmlsource)
x = soup.find_all("div")
for i in range(len(x)):
if x[i].get("class") and "product-list-item" in x[i].get("class"):
print(x[i].get("class"))
これにより、すべての「product-list-item」のリストが表示されますが、次のようなものを試しました
print(x[i].get("class").next_element)
next_element または next_sibling が次のタグを提供するはずだと思ったので、AttributeError: 'list' object has no attribute 'next_element' につながるだけです。だから私は最初のリスト要素だけで試しました:
print(x[i][0].get("class").next_element)
これにより、このエラーが発生しました: return self.attrs[key] KeyError: 0. .find_all("href") および .get("href") も試しましたが、これはすべて同じエラーにつながります。
EDIT3:わかりました、それを解決する方法を見つけたようです、今私はしました:
x = soup.find_all("div")
for i in range(len(x)):
if x[i].get("class") and "product-list-item" in x[i].get("class"):
print(x[i].next_element.next_element.get("href"))
これは、find_all 関数に別の属性を使用して短縮することもできます。
x = soup.find_all("div", "product-list-item")
for i in x:
print(i.next_element.next_element.get("href"))
挨拶