0

文字列を反復処理することで解決できることがわかっている問題を解決しようとしていますが、Pythonを使用すると、よりエレガントに解決できる正規表現があると確信しています...反復プロセスに頼ることを諦めているような気がします。

基本的に、プロパティの単一のセルにリストがあり、どのプロパティがサブプロパティで、どのプロパティがサブサブプロパティであるかを調べて、それらが下にあるプロパティと一致させる必要があります。例えば:

ID=11669アンタムラテライトニッケル/フェロニックケル操作  
     ID=19807ゲベラテライトニッケル鉱山
     ID=19808ジーアイランドラテライトニッケル鉱山
     ID=18923モルノポラテライトニッケル鉱山
     ID=29411ポ
     マラアラテライトニッケル鉱山
          ID=29412マニアンラテライトニッケルプロジェクト
     ID=11665南東スラウェシラテライトニッケルプロジェクト
          ID=27877バフブルラテライトニッケル鉱床

生成する必要があります:

MasterProp,    SubProp
11669,          19807
11669,          19808
11669,          18923
11669,          29411
11669,          19806
19806,          29412
11669,          11665
11665,          27877

11669と2番目のレベルを取得するのは簡単です-私が見つけた最初のIDを取得して、残りすべてに追加するだけです。しかし、「第3レベル」を取得するのははるかに困難です

私は以下を試しました

tags = re.compile('ID=(\d+).+(\&nbsp\;){8}')                        
for tag, space in tags.findall(str(cell)): 
    print tag

しかし、これにより、8スペースより前の最後のIDではなく8スペースより前の最初のIDが得られます...したがって、上記の例では、11669ではなく取得し19806ます。ID=(\d+)8つのスペースの間に他にない場所を見つけるという表現があるのではないかと思いますID=(\d+)が、それは私の(初心者の)能力を超えていることが証明されています!どんな助けでも歓迎されます...

4

2 に答える 2

1

BSを使用してタグを取得した後、次のことを実行します。

>>> from urlparse import urlparse, parse_qs
>>> myurl = 'ShowProp.asp?LL=PS&ID=19807'
>>> parse_qs(urlparse(myurl).query)
{'LL': ['PS'], 'ID': ['19807']}
>>> parse_qs(urlparse(myurl).query)['ID']
['19807']
>>> 
于 2012-06-28T12:56:04.807 に答える
0

HTMLを配置したサンプルコードの方がはるかに理にかなっていると思います。手で振る代わりに実際のデータです。

bs = BeautifulSoup.BeautifulSoup(html)

parent_stack = [None]
res = []
for span in bs.findAll('span', {'style':'white-space:nowrap;display:inline-block'}):
    indent = 1 + span.previousSibling.count(' ') / 5
    id = int(span.find('input')['value'])
    name = span.find('a').text.strip()

    # warning! this assumes that indent-level only ever
    #   increases by 1 level at a time!
    parent_stack = parent_stack[:indent] + [id]
    res.append(parent_stack[-2:])

結果は

[[None, 11669],
 [11669, 19807],
 [11669, 19808],
 [11669, 18923],
 [11669, 29411],
 [11669, 19806],
 [19806, 29412],
 [11669, 11665],
 [11665, 27877],
 [11665, 50713],
 [11665, 27879],
 [11665, 27878],
 [11669, 11394]]
于 2012-06-28T23:04:12.423 に答える