194
soup.find("tagName", { "id" : "articlebody" })

<div id="articlebody"> ... </div>これがタグとその間のものを返さないのはなぜですか? 何も返しません。そして、私はそれをじっと見つめているので、それが存在することを事実として知っています

soup.prettify()

soup.find("div", { "id" : "articlebody" })も機能しません。

(編集: BeautifulSoup がページを正しく解析していないことがわかりました。これはおそらく、解析しようとしていたページが SGML などで適切にフォーマットされていないことを意味します)

4

13 に答える 13

267

コードは正常に動作するため、サンプル ドキュメントを投稿する必要があります。

>>> import BeautifulSoup
>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div id="articlebody"> ... </div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>

s<div>内で<div>s を検索することも同様に機能します。

>>> soup = BeautifulSoup.BeautifulSoup('<html><body><div><div id="articlebody"> ... </div></div></body></html')
>>> soup.find("div", {"id": "articlebody"})
<div id="articlebody"> ... </div>
于 2010-01-25T22:55:30.580 に答える
16

「div」タグが入れ子になりすぎると問題があると思います。Facebook html ファイルからいくつかの連絡先を解析しようとしていますが、Beautifulsoup はクラス "fcontent" のタグ "div" を見つけることができません。

これは他のクラスでも同様です。一般的にdivを検索すると、あまりネストされていないものだけが表示されます。

HTML ソース コードは、あなたの友人 (あなたの友人の 1 人ではない) の友人リストの 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)
于 2010-03-04T03:34:24.337 に答える
9

ほとんどの場合、デフォルトの beautifulsoup パーサーに問題があるためです。「lxml」などの別のパーサーを変更して、もう一度やり直してください。

于 2013-01-29T16:20:48.400 に答える
8

beautifulsoup ソースでは、この行により div を div 内にネストできます。したがって、ルーカスのコメントでのあなたの懸念は有効ではありません。

NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del']

あなたがする必要があると思うのは、次のような必要な属性を指定することです

source.find('div', attrs={'id':'articlebody'})
于 2010-01-25T23:05:25.333 に答える
5

試しましたsoup.findAll("div", {"id": "articlebody"})か?

ばかげているように聞こえますが、野生のものをかき集めている場合、複数の div を除外することはできません...

于 2010-01-25T23:00:55.007 に答える
5

私が使用した:

soup.findAll('tag', attrs={'attrname':"attrvalue"})

find/findall; の私の構文として。とはいえ、タグと属性リストの間に他のオプションのパラメーターがない限り、これは変わらないはずです。

于 2010-01-25T23:02:37.903 に答える
4

Googleをスクレイピングしようとしているときにも起こりました。
私は最終的にpyqueryを使用しました。
インストール:

pip install pyquery

使用する:

from pyquery import PyQuery    
pq = PyQuery('<html><body><div id="articlebody"> ... </div></body></html')
tag = pq('div#articlebody')
于 2015-04-30T05:34:56.693 に答える
4

ここにコードフラグメントがあります

soup = BeautifulSoup(:"index.html")
titleList = soup.findAll('title')
divList = soup.findAll('div', attrs={ "class" : "article story"})

ご覧のとおり、すべてのタグを見つけてから、その中に class="article" を含むすべてのタグを見つけます

于 2010-01-25T23:03:03.233 に答える