首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美汤精确标签数据

美汤精确标签数据
EN

Stack Overflow用户
提问于 2016-12-07 16:01:33
回答 2查看 34关注 0票数 0

我使用BeautifulSoup从超文本标记语言页面中提取一些数据。我所做的是:

代码语言:javascript
复制
list=soup.find_all('td', {'align': 'left', 'valign': None})
print list[0]

它给了我

代码语言:javascript
复制
<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>

但是我想要的输出如下:

代码语言:javascript
复制
Name: Name XYZ, Add: CTS SANSKRUTI LAYOUT, 90 FEET RAOD, THAKUR  COMPLEX, KANDIVALI EAST, Mumbai  MAHARASHTRA-400101

我该怎么办?

EN

回答 2

Stack Overflow用户

发布于 2016-12-07 16:50:06

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

如果您想为标签提取文本,您可以使用tag.text

代码语言:javascript
复制
list[0].text
票数 0
EN

Stack Overflow用户

发布于 2016-12-10 01:41:01

实际上,我认为有两种方法可以做到这一点,这取决于您正在寻找的是什么。

我不确定您想要的输出前面的"name“和"add”字符串是否是拼写错误,所以我看到了两种可能的方法:

  1. 如果您只想提取从find_all方法获得的list_tags的每个标记下的所有文本,而不需要进行任何操作,如分隔每个单词,则转到get_text()方法。

有了它,你可以选择一个简单的列表理解,比如:

代码语言:javascript
复制
>>> 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!

  1. stripped_strings生成器。

这可能是一种更棘手的方法。但你可以提高精确度。

代码语言:javascript
复制
>>> 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下找到的每个字符串与另一个字符串分开。因此,如果您确实想在文本前面添加以下"Name“和" add”,那么它可以更好地符合您的需求。

代码语言:javascript
复制
>>> 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类型的提取文本。

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41012172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档