美丽的汤完全标记数据

时间:2016-12-07 08:01:33

标签: python-2.7 beautifulsoup

我正在使用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

我该怎么办?

2 个答案:

答案 0 :(得分:0)

find_all将返回标记列表,因此当您访问列表list[0]中的第一个项目时,它将返回第一个标记,就像输出一样

如果要为标记提取文本,可以使用tag.text,在您的情况下

list[0].text

答案 1 :(得分:0)

实际上,根据您的需求,我认为有两种方法可供选择。

我不确定你想要的输出前面的“名称”和“添加”字符串是否是拼写错误,所以这里有两种可能的方式我会看到:

  1. 如果您只想提取从list_tags方法获得的find_all的每个标记下方的所有文字,而不进行任何操作,例如将每个单词分开,请转到{{1}方法。
  2. 有了它,你可以选择一个简单的列表理解,如:

    get_text()
    1. >>> 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! 生成器
    2. 它可能是一种棘手的方法。但你可以获得精确度。

      stripped_strings

      在这里,您将list_tags的每个标签下面的每个字符串与另一个字符串分开。因此,如果您确实要在文本前面添加以下“名称”和“添加”,那么它可以更好地符合您的需求。

      >>> 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 
      
      然而,我发现第二种方法不太可控。例如,有时会出现意想不到的字符。在将输出写出到文件时,我更喜欢连接!

      无论如何,在这两种情况下,不要忘记结果列表将包含unicode类型的提取文本。

      干杯