2016-12-07 54 views
0

我使用BeautifulSoup從HTML頁面提取一些數據。我做的是:美麗的湯精確的標記數據

list=soup.find_all('td', {'align': 'left', 'valign': None}) 
print list[0] 

它給了我

<td align="left">\n<h3>Name XYZ</h3>\n CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, <br/>KANDIVALI EAST,<br/>Mumbai MAHARASHTRA-400101</td> 

但是我要像輸出:

Name: Name XYZ, Add: CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, KANDIVALI EAST, Mumbai MAHARASHTRA-400101 

我該怎麼辦?

回答

0

find_all將返回標籤列表,所以當你在列表list[0]訪問的第一個項目,它將返回的第一個標籤,就像你輸出

,如果你想提取的標記文字,可以使用tag.text,在你的情況下

list[0].text 
0

其實,我認爲有兩種方法,這取決於你在找什麼。

林不知道「姓名」,以及是否在您需要的輸出前的「添加」字符串是錯別字或沒有,所以這裏有兩種可能的方法,我就如何做到這一點看:

  1. 在如果您只是想提取方法獲得的list_tags的每個標記下方的所有文本,而不進行任何操作(如分隔每個詞),請參閱get_text()方法。

有了它,你可以選擇一個簡單的列表理解一樣:

>>> simple_uni_text = [tag.get_text() for tag in list_tags] 
>>> simple_uni_text 
[u'\nName XYZ\n CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, KANDIVALI EAST,Mumbai MAHARASHTRA-400101', u'\nName ABC\n DUT WITHOUT LAYIN, 45 FOOT AODR, RUKTHA SIMPLE, BOMBAY WEST,BOMBAY RASHTRAMAHA-400101'] 
>>> len(simple_uni_text) 
>>> 2 # I pretended the list_tags to have two tags, so it generated a list of length two! 
  • stripped_strings發電機
  • 它可能是一個棘手的方法。但是你可以獲得精確性。

    >>> uni_stripped_words = [] 
    >>> for tag in list_tags: 
         for string in tag.stripped_strings: 
          uni_stripped_words.append(string) 
    >>> uni_stripped_words 
    [u'Name XYZ', u'CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX,', u'KANDIVALI EAST,', u'Mumbai MAHARASHTRA-400101', u'Name ABC', u'DUT WITHOUT LAYIN, 45 FOOT AODR, RUKTHA SIMPLE,', u'BOMBAY WEST,', u'BOMBAY RASHTRAMAHA-400101'] 
    >>> len(uni_stripped_words) 
    8 
    

    在這裏,您將在每個您的list_tags的teag之下找到的每個字符串與另一個字符串分開。因此,如果您確實想要在文本前添加以下「名稱」和「添加」,那麼它可以更好地符合您的需求。

    >>> for word in uni_stripped_words: 
         print word 
    
    
        Name XYZ 
        CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR COMPLEX, 
        KANDIVALI EAST, 
        Mumbai MAHARASHTRA-400101 
        Name ABC 
        DUT WITHOUT LAYIN, 45 FOOT AODR, RUKTHA SIMPLE, 
        BOMBAY WEST, 
        BOMBAY RASHTRAMAHA-400101 # Sorry for the weird text example haha 
    

    然而,我發現第二種方法不太可控。有,例如,有時意想不到的字符。個人而言,我更喜歡在將輸出寫出到文件時連接在一起!

    無論如何,在這兩種情況下,不要忘記,結果列表將包含解壓縮的unicode類型文本。

    乾杯