3

私はpythonとbeautifulsoupを学んでいて、このコードをオンラインで見ました:

from BeautifulSoup import BeautifulSoup, SoupStrainer
import re

html = ['<html><body><p align="center"><b><font size="2">Table 1</font></b><table><tr><td>1. row 1, cell 1</td><td>1. row 1, cell 2</td></tr><tr><td>1. row 2, cell 1</td><td>1. row 2, cell 2</td></tr></table><p align="center"><b><font size="2">Table 2</font></b><table><tr><td>2. row 1, cell 1</td><td>2. row 1, cell 2</td></tr><tr><td>2. row 2, cell 1</td><td>2. row 2, cell 2</td></tr></table></html>']
soup = BeautifulSoup(''.join(html))
searchtext = re.compile(r'Table\s+1',re.IGNORECASE)
foundtext = soup.find('p',text=searchtext) # Find the first <p> tag with the search text
table = foundtext.findNext('table') # Find the first <table> tag that follows it
rows = table.findAll('tr')
for tr in rows:
    cols = tr.findAll('td')
    for td in cols:
        try:
            text = ''.join(td.find(text=True))
        except Exception:
            text = ""
        print text+"|",
    print

他のすべては明らかですが、結合がどのように機能しているか理解できませんでした。

    text = ''.join(td.find(text=True))

join について BS のドキュメントを検索してみましたが、何も見つかりませんでしたし、BS での join の使用方法についてオンラインでヘルプを実際に見つけることもできませんでした。

その回線の仕組みを教えてください。ありがとう!

PS: 上記のコードは別の stackoverflow ページからのもので、私の宿題ではありません :) Python で BeautifulSoup を使用して、テキスト文字列の後にテーブルを見つけるにはどうすればよいですか?

4

3 に答える 3

6

''.join()はPython関数であり、BS固有のものではありません。文字列を結合値としてシーケンスを結合しましょう。

>>> '-'.join(map(str, range(3)))
'0-1-2'
>>> ' and '.join(('bangers', 'mash'))
'bangers and mash'

''は単に空の文字列であり、文字列のセット全体を1つの大きな文字列に結合するのが簡単になります。

>>> ''.join(('5', '4', 'apple', 'pie'))
'54applepie'

例の特定のケースでは、ステートメントは、またはまたは<td>などの含まれているHTML要素を含む、要素に含まれているすべてのテキストを検索し、それらをすべて1つの長い文字列にまとめます。したがって、Python文字列のシーケンスを見つけて、それらを1つの長い文字列に結合します。<b><i><a href="">td.find(text=True)''.join()

于 2012-09-03T19:54:43.030 に答える
0

JoinはBeautifulSoupの一部ではありませんが、Pythonに組み込まれている文字列のメソッドです。一連の要素を指定された文字列で結合します。たとえば、'+'.join(['a', 'b', 'c'])ですa+b+cドキュメントを参照してください。

于 2012-09-03T19:54:57.167 に答える
0

コードが正しくありません。この行:

text = ''.join(td.find(text=True))

これは、td タグの最初の文字列の子を返し、それに join を使用しようとします。''.join() は最初の文字列の子を反復処理してコピーを作成するだけなので、正しく機能します。

したがって、この:

<td>foo<b>bar</b></td>

''.join("foo") を実行するだけです。

代わりに、td.text プロパティを使用してください。td 内のすべての文字列が自動的に検索され、結合されます。

text = td.text
于 2012-09-05T05:31:23.460 に答える