soup.find("tagName", { "id" : "articlebody" })
なぜこれは<div id="articlebody"> ... </div>
タグとその間のものを返さないのですか?何も返しません。そして、私はそれが存在することを知っています
soup.prettify()
soup.find("div", { "id" : "articlebody" })
も機能しません。
編集:この投稿への回答はありません-どうすれば削除できますか? BeautifulSoupが正しく解析されていないことがわかりました。これはおそらく、解析しようとしているページがSGMLなどで適切にフォーマットされていないことを意味します。
コードが正常に機能するため、サンプルドキュメントを投稿する必要があります。
>>> import BeautifulSoup
>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div id="articlebody"> ... </div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>
<div>
s内の<div>
sの検索も同様に機能します。
>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div><div id="articlebody"> ... </div></div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>
id
で要素を見つけるには:
div = soup.find(id="articlebody")
Beautiful Soup 4は、ほとんどの CSSセレクター と .select()
メソッド をサポートしているため、次のような id
selector を使用できます。
soup.select('#articlebody')
要素のタイプを指定する必要がある場合は、id
セレクターの前に type selector を追加できます。
soup.select('div#articlebody')
.select()
メソッドは要素のコレクションを返します。つまり、次の .find_all()
method の例と同じ結果を返します。
soup.find_all('div', id="articlebody")
# or
soup.find_all(id="articlebody")
単一の要素のみを選択したい場合は、単に .find()
method を使用できます。
soup.find('div', id="articlebody")
# or
soup.find(id="articlebody")
「div」タグのネストが多すぎると問題があると思います。 Facebookのhtmlファイルからいくつかの連絡先を解析しようとしていますが、Beautifulsoupはタグ「div」とクラス「fcontent」を見つけることができません。
これは他のクラスでも発生します。一般的にdivを検索すると、それほどネストされていないdivのみになります。
Htmlソースコードは、あなたの友人(あなたの友人ではない)の友人リストのfacebookの任意のページです。誰かがそれをテストしてアドバイスを与えてくれたら、本当にありがたいです。
これは私のコードで、クラス「fcontent」でタグ「div」の数を印刷しようとしています。
from BeautifulSoup import BeautifulSoup
f = open('/Users/myUserName/Desktop/contacts.html')
soup = BeautifulSoup(f)
list = soup.findAll('div', attrs={'class':'fcontent'})
print len(list)
ほとんどの場合、デフォルトのbeautifulsoupパーサーに問題があるためです。 「lxml」などの別のパーサーを変更して、再試行してください。
Beautifulsoupソースでは、この行によりdivをdiv内にネストできます。そのため、ルカのコメントに対する懸念は無効になります。
NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del']
あなたがする必要があると思うのは、あなたが望む属性を指定することです
source.find('div', attrs={'id':'articlebody'})
soup.findAll("div", {"id": "articlebody"})
を試しましたか?
クレイジーに聞こえますが、もしあなたが荒野からものを削っているなら、複数のdivを除外することはできません...
私が使用した:
soup.findAll('tag', attrs={'attrname':"attrvalue"})
Find/findallの構文として。つまり、タグと属性リストの間に他のオプションのパラメーターがない限り、これは異なるべきではありません。
Googleをスクレイプしようとしたときにも私に起こりました。
私はpyqueryを使用することになりました。
インストール:
pip install pyquery
つかいます:
from pyquery import PyQuery
pq = PyQuery('<html><body><div id="articlebody"> ... </div></body></html')
tag = pq('div#articlebody')
ここにコードの断片があります
soup = BeautifulSoup(:"index.html")
titleList = soup.findAll('title')
divList = soup.findAll('div', attrs={ "class" : "article story"})
ご覧のとおり、すべてのタグを見つけてから、class = "article"が含まれるすべてのタグを見つけます