2

他の 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"))

挨拶

4

1 に答える 1

2

クラス「product-list-item」のdivタグの直後にある、このドキュメントのすべてのhrefリンクを取得したい

<a href>の最初の要素を見つけるには<div>:

links = []
for div in soup.find_all('div', 'product-list-item'): 
    a = div.find('a', href=True) # find <a> anywhere in <div>
    if a is not None:
       links.append(a['href'])

リンクが 内にあると仮定し<div>ます。最初の要素<div>より前の要素<a href>は無視されます。

よろしければ; より厳密にすることもできます。たとえば、最初の子である場合にのみリンクを取得し<div>ます。

a = div.contents[0] # take the very first child even if it is not a Tag
if a.name == 'a' and a.has_attr('href'):
   links.append(a['href'])

または、<a>内部にない場合<div>:

a = div.find_next('a', href=True) # find <a> that appears after <div>
if a is not None:
   links.append(a['href'])

BeautifulSoup で検索およびナビゲートする方法は多数あります

で検索する場合lxml.html、xpath および css 式に慣れていれば使用することもできます。

于 2013-05-31T18:58:17.560 に答える