python - 如果在 HTML 页面中找不到文本,如何在 python 中打印空值?

标签 python html regex xml list

当 Html 页面中缺少文本时,我需要一种方法来呈现空值并将其附加到 python 中的列表。

Html渲染的原始数据如下:

  <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">TICKER: </SPAN><SPAN CLASS="c2">FB (NASDAQ) (57%); </SPAN><SPAN CLASS="c4">AXP</SPAN><SPAN CLASS="c2"> (NYSE) (54%)</SPAN></P>
    </DIV>
  <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">INDUSTRY: </SPAN><SPAN CLASS="c2">NAICS511110 NEWSPAPER PUBLISHERS (61%); SIC2711 NEWSPAPERS: PUBLISHING, OR PUBLISHING &amp;</SPAN></P>
  </DIV>
  <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">LOAD-DATE: </SPAN><SPAN CLASS="c2">November 7, 2016</SPAN></P>
<!-- Hide XML section from browser
</DOCFULL>
    </DOC> -->
    <DIV CLASS="c10">&nbsp;</DIV>
    <A NAME="DOC_ID_0_2"></A><!-- Hide XML section from browser
    <DOC NUMBER=3>
    <DOCFULL> -->
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">TICKER: </SPAN><SPAN CLASS="c2">CS (PAR) (91%); AXJ (ASX) (91%); AXA (BIT) (91%); </SPAN><SPAN CLASS="c4">AXP</SPAN><SPAN CLASS="c2"> (NYSE) (57%)</SPAN></P>
    </DIV>
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">COUNTRY: </SPAN><SPAN CLASS="c2">UNITED KINGDOM (88%)</SPAN><SPAN CLASS="c2">&nbsp;</SPAN><SPAN CLASS="c2">United Kingdom GB</SPAN></P>
    </DIV>
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">REGION: </SPAN><SPAN CLASS="c2">Europe; EU; Western Europe</SPAN></P>
    </DIV>
    <BR><DIV CLASS="c5"><P CLASS="c6"><SPAN CLASS="c8">LOAD-DATE: </SPAN><SPAN CLASS="c2">May 12, 2016</SPAN></P>

我需要在标签之间写下文本值,它们是; TICKERINDUSTRYCOUNTRYREGIONLOAD-DATE 到两个单独的列表中.

  • Set 1 需要包含TICKERINDUSTRYLOAD-DATE
  • 第 2 组需要包含 COUNTRYREGION

如果文本中缺少 COUNTRY,我需要将包含 Null 值的条目附加到相应列表。

例子

  • 第一个Html标签列表不包含COUNTRY,所以应该存储NULL
  • 第二个 Html 标签列表确实包含 COUNTRY,因此应该存储 United Kingdom

结果应该变成:

['Null', 'United Kingdom\nUnited Kingdom GB']

我尝试过的解决方法如下:

countrypattern="\<SPAN CLASS=\"c8\"\>COUNTRY: </SPAN><SPAN CLASS=\"c2\"\>(.*)\</SPAN>"
countrypatternvalues=[a.strip("*") for a in re.findall(countrypattern,response)]
if not countrypatternvalues:
     countrypatternvalues.append(None)
countryvalues = re.sub(cleanr, '', str(countrypatternvalues))

请帮我解决这个问题。

最佳答案

给你:

import re

res = re.findall(r"""<SPAN CLASS="c8">([A-Z]+): *</SPAN><SPAN CLASS="c2">([^<]*)</SPAN>""",html)

class Items(object):
    def __init__(self):
        # list of items
        self.items = []             

    def add_item(self, name, value):
        if (not self.items) or (name in self.items[-1]):
            self.items.append({})
        self.items[-1][name] = value

    def get_list(self, key):
        return [ item[key] if key in item else None for item in self.items ]         


items = Items()

for item in res:
    items.add_item(item[0], item[1])

print items.get_list('COUNTRY')

如果组中没有重复的名称,这会起作用,因为重复会产生另一个组。

关于python - 如果在 HTML 页面中找不到文本,如何在 python 中打印空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973260/

相关文章:

java - corenlp 情绪通过 Python 中的 Py4j Java 程序引发错误

python - PyQt/PySide 中是否有默认图标?

python - AWS Translate 使用 Python 的大型 HTML

jquery - 使标题像谷歌浏览器移动应用程序地址栏一样

html - 如何创建带有静态标题的响应式网页?

python - 如何使用正则表达式在Python中获取段落中的最后一个单词

javascript - 使用 JavaScript 匹配 HTML 字符串中的所有空格

python - 在 Python 中组合多个 for 循环

regex - 使用 Apache Nifi 提取 HL7 值并应用正则表达式

python - 正则表达式,其中模式的一部分是可选的。