4

HTMLを解析するためのbeautifulsoupに取り組み始めました。
たとえば、サイト「http://en.wikipedia.org/wiki/PLCB1

import sys
sys.setrecursionlimit(10000)

import urllib2, sys
from BeautifulSoup import BeautifulSoup

site= "http://en.wikipedia.org/wiki/PLCB1"
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)

table = soup.find('table', {'class':'infobox'})
#print table
rows = table.findAll("th")
for x in rows:
    print "x - ", x.string

URL がある場合に None として出力されます。なぜそうなのですか?

出力:

x -  Phospholipase C, beta 1 (phosphoinositide-specific)
x -  Identifiers
x -  None
x -  External IDs
x -  None
x -  None
x -  Molecular function
x -  Cellular component
x -  Biological process
x -  RNA expression pattern
x -  Orthologs
x -  Species
x -  None
x -  None
x -  None
x -  RefSeq (mRNA)
x -  RefSeq (protein)
x -  Location (UCSC)
x -  None

たとえば、Location の後に、「pubmed search」を含む th がもう 1 つありますが、None として表示されます。なぜそれが起こっているのか知りたいです。


2番目:解析が容易になるように辞書でthとそれぞれのtdを取得する方法はありますか?

4

2 に答える 2

5

Element.string要素に直接テキストがある場合にのみ、値が含まれます。ネストされた要素は含まれません。

BeautifulSoup 4 を使用している場合は、Element.stripped_strings代わりに次を使用します。

print ''.join(x.stripped_strings)

BeautifulSoup 3 では、すべてのテキスト要素を検索する必要があります。

print ''.join([unicode(t).strip() for t in x.findAll(text=True)])

<th>との要素を辞書に結合したい場合は<td>、すべての<th>要素をループしてから、 を使用.findNextSibling()して対応する要素を見つけ、それを上記のトリック<td>と組み合わせて自分で辞書を作成します。.findAll(text=True)

info = {}
rows = table.findAll("th")
for headercell in rows:
    valuecell = headercell.findNextSibling('td')
    if valuecell is None:
        continue
    header = ''.join([unicode(t).strip() for t in headercell.findAll(text=True)])
    value = ''.join([unicode(t).strip() for t in valuecell.findAll(text=True)])
    info[header] = value
于 2013-02-16T14:46:35.737 に答える
2

HTMLを調べると、

<th colspan="4" style="text-align:center; background-color: #ddd">Identifiers</th>
</tr>
<tr class="">
<th style="background-color: #c3fdb8"><a href="/wiki/Human_Genome_Organisation" title="Human Genome Organisation">Symbols</a></th>
<td colspan="3" class="" style="background-color: #eee"><span class="plainlinks"><a rel="nofollow" class="external text" href="http://www.genenames.org/data/hgnc_data.php?hgnc_id=15917">PLCB1</a>; EIEE12; PI-PLC; PLC-154; PLC-I; PLC154; PLCB1A; PLCB1B</span></td>
</tr>
<tr class="">
<th style="background-color: #c3fdb8">External IDs</th>

の間に表示され、IdentifiersテキストのないタグExternal IDsがあり、タグのみがあります。<th><a>

<th style="background-color: #c3fdb8"><a href="/wiki/Human_Genome_Organisation" title="Human Genome Organisation">Symbols</a></th>

これ<th>にはテキストがありません。です。x.string_None

于 2013-02-16T14:50:56.813 に答える